我正在运行一组使用模块级setup
和teardown
方法的QUnit测试。我注意到,在我的测试中使用start()
和stop()
似乎会在调用它们时中断,这会导致问题,因为在我的设置中可用的某些项目对运行的某些测试不可用。
编辑:我注意到,只有当我以编程方式加载测试脚本时才会发生这种情况(我使用的是脚本加载程序:LABjs)。我已相应地修改了这个问题的主题和内容。我正在加载这样的测试:
$LAB.script('/static/tests.js')
仍然不确定为什么会发生这种情况。
这是我的测试模块示例:
module('Class Foo', {
setup: function() {
console.log('setup called');
},
teardown: function() {
console.log('teardown called');
}
});
test('Test1', function() {
stop();
console.log('test1');
ok(true);
start();
});
test('Test2', function() {
stop();
console.log('test2');
ok(true);
start();
});
test('Test3', function() {
stop();
console.log('test3');
ok(true);
start();
});
这会产生控制台输出(请注意,设置会被调用两次,然后不会再次调用):
setup called
test1
teardown called
(2)setup called
test3
teardown called
test2
teardown called
删除启动/停止,或修改我的测试文件,使其不以程序方式加载(即:使用传统标签):
test('Test3', function() {
console.log('test3');
ok(true);
});
产生更预期的执行顺序:
setup called
test1
teardown called
setup called
test2
teardown called
setup called
test3
teardown called
我是不是误解了它应该如何运作?
QUnit似乎喜欢在启动时加载测试脚本。这个操作是可配置的,所以我发现以下设置可以推迟QUnit的启动,直到所有测试脚本都可用:
QUnit.config.autostart = false;
$LAB.script('/static/tests.js').wait(function() {
QUnit.start();
});
我仍然不确定为什么会发生这种情况,所以我很想看看这方面的任何答案(或者我会在弄清楚后更新!),但这个解决方案让我暂时度过了难关。