beforeEach 不会在模块化 QUnit/Sinon 测试中使用 CoffeeScript 中的 Require.

beforeEach does not run in modular QUnit/Sinon tests with Require.js in CoffeeScript

本文关键字:CoffeeScript Require 中的 测试 Sinon 模块化 QUnit beforeEach      更新时间:2023-09-26

尝试用require构建QUnit 0.9.0测试.js正如Nathan Davison在这里解释的那样,但另外使用QUnit.module。(咖啡脚本文件在打开测试页之前转换为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 文档中的示例之一,除了被包装到 dedefine 中):

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 中:"类型错误:无法读取未定义的属性'add'",在同一函数中。

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

控制台.log输出:in test: ["setup", "teardown", "beforeEach"](并且在日志中看不到"in beforeEach"。

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

我想,最大的问题是为什么以前每个都不运行?我错过了什么吗?

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

这些事情在阅读 QUnit 2.x 升级指南后变得清晰起来。