Qunit beforeEach,afterEach - async

时间:2014-12-31 07:32:03

标签: testing asynchronous qunit

从start()开始,在Qunit 2.0中将删除stop(),通过beforeEach,afterEach方法,异步设置和拆卸的替代方法是什么?例如,如果我希望beforeEach等待承诺完成?

3 个答案:

答案 0 :(得分:7)

QUnit基本上希望人们停止使用global methods(不只是start()stop(),还有test()expect()等。因此,从版本1.16.0开始,您应始终使用传递到QUnit函数的全局命名空间(assert)或test() API参数。这包括新的async control

QUnit.test( "testing async action", function( assert ) {  // <-- note the `assert` argument here
    var done = assert.async();  // tell QUnit we're doing async actions and
                                // hold onto the function it returns for later

    setTimeout(function() {  // do some async stuff
        assert.ok( true, "This happened 100 ms later!" );

        done();  // using the function returned from `assert.async()` we 
                 // tell QUnit we're don with async actions
    }, 100);
});

如果您熟悉旧的start()stop()做事方式,您应该会发现这非常相似,但更加分散和可扩展。

因为async()方法调用在测试的assert参数上,所以它不能在beforeEach()函数中使用。如果你有一个如何做到这一点的例子,请发布它,我们可以尝试找出如何以新的方式进行git。

<强>更新

我之前的错误是,assert对象被传递到模块上的beforeEachafterEach回调中,因此您应该能够执行与之相同的逻辑操作测试:

QUnit.module('set of tests', {
    beforeEach: function(assert) {
        var done = assert.async();
        doSomethingAsync(function() {
            done(); // tell QUnit you're good to go.
        });
    }
});

(在QUnit 1.17.1中测试)

答案 1 :(得分:0)

看到没有人回答beforeEach / afterEach部分:测试套件应该在页面加载后立即运行。如果无法立即实现,则可以使用配置QUnit:

QUnit.config.autostart = false;

继续设置测试套件(初始化测试,将它们提供给QUnit,异步等待加载某些组件,无论是AJAX还是其他任何东西),您的站点,最后,当它准备就绪时,运行:< / p>

QUnit.start();

QUnit's docsite已经涵盖了它。

答案 2 :(得分:0)

Ember Qunit,曾经存在beforeEach / setupafterEach / teardown并存一段时间。

参见PR:https://github.com/emberjs/ember-qunit/pull/125