2012-06-14 41 views
3

我需要一些帮助理解QUnit内部。 我不时读到它的源码,但是当谈到异步测试时,我还在写奇怪的测试。 我理解异步测试的概念,以及stop()和start()方法(以及为什么需要它们),但是当我将它们与setup和teardown结合使用时,我会遇到很多困难的情况。QUnit异步测试与安装和拆解

这里是我的Testcode:

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(); 
    }); 
}); 

Allthough这些asynchron测试,我想我会得到这样的事情在控制台:

setup 
test1 
teardown 
setup 
test2 
teardown 
setup 
test3 
teardown 
... 

,因为我认为qunit会叫的安装和拆卸在测试身体周围?

但我把所有的事情混在一起,从请求到请求以另一种方式混洗。

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

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

+1

没问题,所以我停止了解这个问题。我刚来到解决方案,如果这样从qunit调用这个设置函数是没用的。因为“全局”测试变量将始终被覆盖。所以我开始把我的设置功能包括进测试本身,这很好用 –

+1

Max Cantor认为你可能在QUnit中发现了一个错误。你可以在GitHub上找到他的错误报告并解决这个问题:https://github.com/jquery/qunit/pull/320 –

+0

用'asyncTest'函数设置/拆卸仍然有些bug。即使是“修复”。在我的测试中,它似乎更好,但它最终打嗝并连续进行多次调用。也许,如果我调试了qunit代码,我会更好地理解这个问题,但我觉得我不应该这样做。相反,正如@ P.scheit提到的那样,我认为我会在模块化设置/拆解中发现我的依赖关系。可能完全... –

回答

6

这是一个记录的问题:

http://api.qunitjs.com/QUnit.config/

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

头看起来是这样的:

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

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

所以它基本上喜欢做的stop()和start(),但加载测试本身。我测试了它,拆卸/设置/测试现在按照正确的顺序正确执行。