动态加载的测试脚本会中断测试执行顺序



我正在运行一组使用模块级setupteardown方法的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();
});

我仍然不确定为什么会发生这种情况,所以我很想看看这方面的任何答案(或者我会在弄清楚后更新!),但这个解决方案让我暂时度过了难关。

最新更新