首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何测试在onready之前执行的代码部分?

如何测试在onready之前执行的代码部分?
EN

Stack Overflow用户
提问于 2016-06-19 14:37:31
回答 1查看 55关注 0票数 0

我写了一个小页面来学习BDD/TDD。它在http://duolingo.howyousay.it/link.html

我的测试(目前只有一个文件)在http://duolingo.howyousay.it/tests/test.html?coverage&hidepassed&noglobals

除了http://duolingo.howyousay.it/duolingo_link_fixer.js中的5行代码外,我已经设法获得了100%的代码覆盖率

代码语言:javascript
复制
   1  var DuolingoLinkFixer = function() {
   2    this.data = {};
   3    var self = this;
   4
   5    document.onreadystatechange = function () {
*  6      self.init();
   7    }
   8  };
   9
  10  DuolingoLinkFixer.prototype.init = function() {
* 11    if (document.readyState == "complete") {
* 12      this.setOriginalUrl();
* 13      this.setAlternateText();
* 14      this.setFixedUrl();
  15    }
  16  }

第6行和第11-14行没有经过测试,但是如果我删除它们,代码就不能工作。我使用的是QUnit、QUnit-BDD和Blanket.js。我如何测试在onready之前运行的部分代码,因为这些测试似乎只在onready之后开始运行

我的测试代码目前是这样开始的:

代码语言:javascript
复制
describe("DuolingoLinkFixer", function() {
  describe("new", function() {
    it("should create a new instance of DuolingoLinkFixer", function() {
      expect(new DuolingoLinkFixer instanceof DuolingoLinkFixer).to.be.true();
    });
  });

});

这是我的测试HTML页面的源代码:

代码语言:javascript
复制
<!DOCTYPE html>
<html>
  <head>
    <title>Duolingo JavaScript tests</title>

    <script type="text/javascript" src="/lib/jquery/jquery-3.0.0.js"></script>
    <script type="text/javascript">
      $.holdReady(true);
    </script>

    <link type="text/css" rel="stylesheet" href="/lib/qunit/qunit-1.23.1.css">
    <script type="text/javascript" src="/lib/qunit/qunit-1.23.1.js"></script>
    <script type="text/javascript" src="/lib/qunit-bdd/qunit-bdd.js"></script>

    <script type="text/javascript" src="/lib/blanket.js/blanket.min.js"></script>

    <script type="text/javascript" data-cover src="../url_helper.js"></script>
    <script type="text/javascript" data-cover src="../duolingo_link_fixer.js"></script>

    <script type="text/javascript" src="test_url_helper.js"></script>
    <script type="text/javascript" src="test_duolingo_link_fixer.js"></script>
  </head>
  <body>
    <div id="qunit"></div>
  </body>
</html>

我试着按照另一篇文章中的建议添加了jQuery的$.holdReady(true);,但是没有帮助。我不需要使用jQuery,所以我在这个项目中尽量避免使用它。

EN

回答 1

Stack Overflow用户

发布于 2016-07-09 08:19:01

事实证明,我只需要在我的测试代码中添加一行代码来测试以前无法测试的代码:

代码语言:javascript
复制
describe("DuolingoLinkFixer", function() {
  describe("new", function() {
    it("should create a new instance of DuolingoLinkFixer", function() {
      expect(new DuolingoLinkFixer instanceof DuolingoLinkFixer).to.be.true();
      document.onreadystatechange();
    });
  });

});

添加document.onreadystatechange();会运行代码,就像它是由readyStateChange事件触发一样。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37904608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档