beforeEach不在CoffeeScript中使用Require.js进行模块化QUnit / Sinon测试

时间:2016-03-04 15:55:13

标签: javascript coffeescript requirejs qunit sinon

尝试使用require {js构建QUnit 0.9.0测试,如Nathan Davison here所述,但另外使用QUnit.module。 (在打开测试页之前,coffeescript文件将转换为js文件)

HTML:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Test</title>
    <link rel="stylesheet" href="css/qunit.css">
    <script data-main="unittestsmain" async src="js/require.js"></script>
</head>
<body>
    <div id="qunit"></div>
    <div id="qunit-fixture"></div>
</body>
</html>

unittestsmain.coffee(有3个测试模块,为了节省空间而删除):

requirejs.config
  baseUrl: '.'
  paths:
    "sinon": 'js/sinon-1.17.3'
    "QUnit": 'js/qunit'
  shim:
    "QUnit":
      exports: 'QUnit',
      init: () ->
        QUnit.config.autoload = false
        QUnit.config.autostart = false

require ["QUnit", "sinon", "test_sum"],
  (QUnit, sinon, test_sum) ->
    test_sum.run()
    QUnit.load()
    QUnit.start()

test_sum.coffee(类似于QUnit documentation中的一个示例,除了被包装到define中):

define ["sum"], (sum) ->
  run: () ->
    module "Sum class",
      beforeEach: ->
        console.log "in beforeEach:", (p for p of @)
        @adder = sum.Sum()

    test "Sum: common cases", (assert) ->
      assert.equal sum.sum_of_entries([1, 2, 3]), 6
      assert.equal sum.sum_of_entries([]), 0
      return
    # ...
    test "Sum: adder class", (assert) ->
      console.log "in test:", (p for p of @)

      @adder.add(5)
      assert.equal @adder.result(), 0
    return

在为adder类添加测试之前我没有遇到任何问题,在Firefox中抱怨:this.adder is undefined(并指向test "Sum: adder class" ...部分。)。在Chromium中:&#34; TypeError:无法读取属性&#39;添加&#39;未定义&#34;,在同一个函数中。

浏览器中的测试页面看起来很好,除了上面提到的失败测试。

console.log输出:in test: ["setup", "teardown", "beforeEach"](并且在日志中没有&#34;&#34;在日志中。)

尝试了一些小的变化,比如=&gt;而不是 - &gt; ,.start,.load命令,但它没有帮助。 define ["QUnit", "sum"], (QUnit, sum) ->然后在test_sum中使用QUnit.也无济于事。

我认为,最大的问题是为什么beforeEach不运行?我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

beforeEach来自QUnit 2.x,而在QUnit 0.9中则是setup

阅读QUnit 2.x Upgrade Guide后,这些问题变得清晰了。