Asynchronous 带设置和拆卸的QUnit异步测试

Asynchronous 带设置和拆卸的QUnit异步测试,asynchronous,installation,qunit,teardown,Asynchronous,Installation,Qunit,Teardown,我需要一点帮助来了解QUnit internas。 我不时阅读它的源代码,但对于异步测试,我仍然在编写奇怪的测试。 我理解异步测试的概念,以及stop()和start()方法(以及为什么需要它们),但是当我将它们与setup和teardown结合使用时,我会遇到很多奇怪的情况 以下是我的测试代码: use(['Psc.Exception','Psc.Code'], function () { module("async", { setup: function () { c

我需要一点帮助来了解QUnit internas。 我不时阅读它的源代码,但对于异步测试,我仍然在编写奇怪的测试。 我理解异步测试的概念,以及stop()和start()方法(以及为什么需要它们),但是当我将它们与setup和teardown结合使用时,我会遇到很多奇怪的情况

以下是我的测试代码:

use(['Psc.Exception','Psc.Code'], function () {
  module("async", {
    setup: function () {
      console.log('setup');
    }, teardown: function () {
      console.log('teardown');
    }
  });

  asyncTest("test1", function () {
    expect(0);

    console.log('test1');
    start();
  });

  asyncTest("test2", function () {
    expect(0);

     console.log('test2');
     start();
  });

  asyncTest("test3", function () {
    expect(0);

    console.log('test3');
    start();
  });

  asyncTest("test4", function () {
    expect(0);

    console.log('test4');
    start();
  });

  asyncTest("test5", function () {
    expect(0);

    console.log('test5');
    start();
  });
});
尽管这些都是异步测试,但我想我会在控制台中得到如下结果:

setup
test1
teardown
setup
test2
teardown
setup
test3
teardown
...
因为我以为qunit会调用setup并在测试体周围拆卸

但我把每件事都搞混了,从一个请求到另一个请求,用另一种方式洗牌

setup
test1
teardown
setup
setup
setup
setup
test5
teardown 
test4
teardown
test3
teardown
test2
teardown

有人能一步一步地解释吗?

这是一个记录在案的问题:

异步加载测试时,建议将QUnit.config.autostart设置为false。这是我的情况,因为“use”是异步进行的

头部看起来像这样:

QUnit.config.autostart = false;
use(['Psc.Exception','Psc.Code'], function () {

  QUnit.start();
  module("async", {

因此,它基本上类似于执行stop()和start(),但用于加载测试本身。我对它进行了测试,拆卸/设置/测试现在以正确的顺序正确执行了

好的,所以我不再试图理解这个问题。我刚刚找到了一个解决方案,如果用这种方式从qunit调用setup函数,那么它是无用的。因为“全局”测试变量将始终被覆盖。所以我开始在测试中加入我的设置函数,这非常有效Max Cantor相信你可能在QUnit中发现了一个bug。你可以在GitHub上找到他的bug报告并修复它:在
asyncTest
函数的安装/拆卸中仍然存在一些bug;即使有“修复”。在我的测试中,它看起来更好,但最终会打嗝,并连续多次调用设置。也许,如果我调试了qunit代码,我会更好地理解这个问题,但我觉得我不应该这么做。相反,正如@P.scheit所提到的,我认为我将把我的依赖性放在模块化设置/拆卸上。可能完全是。。。