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

时间:2012-07-25 16:53:06

标签: unit-testing qunit

我正在运行一组使用模块级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 

我是否误解了这应该如何发挥作用?

1 个答案:

答案 0 :(得分:0)

看起来QUnit喜欢你的测试脚本在它自行启动时加载。此操作是可配置的,因此我发现以下设置可以推迟启动QUnit,直到所有测试脚本都可用:

QUnit.config.autostart = false;
$LAB.script('/static/tests.js').wait(function() {
  QUnit.start();
});

我仍然不确定为什么会发生这种情况所以有兴趣看到这方面的任何答案(或者当我搞清楚时我会更新这个!)但是这个解决方案让我感到满意现在。