0

我正在运行一组使用模块级别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 被调用了两次,然后不再):

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 

我是否误解了这应该如何运作?

4

1 回答 1

0

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

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

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

于 2012-07-26T05:28:58.437 回答