在QUnit.js测试失败后停止

时间:2015-01-21 15:10:07

标签: javascript qunit

有没有办法让QUnit.js在单个测试失败后不运行剩余的测试?

使用以下代码作为示例:

QUnit.test('test1', function(assert) {                 
    assert.equal(1,1);
    assert.equal(1,2);
    assert.equal(3,3);
});              

QUnit.test('test2', function(assert) {                 
    assert.equal(4,4);
    assert.equal(5,5);
    assert.equal(6,6);
}); 

有没有办法让QUnit在assert.equal(1,2)之后停止执行?这意味着永远不应该运行test2

2 个答案:

答案 0 :(得分:0)

好的,基于我上面的评论,我运行了下面的代码,并且我想你想要它们停止的事情。再次,正如我在评论中所说,我真的会调查这是否是一个好主意。通常,您希望您的测试具有幂等性,以便任何一个失败都不会影响任何其他测试。

请注意,我们必须在这里将reorder配置选项设置为false,否则QUnit将首先尝试运行先前失败的测试以“短路”,但您不希望这样我正在猜测。我还添加了一个“test0”来查看填充效果。

QUnit.config.reorder = false;

// This is how we detect the failure and cancel the rest of the tests...
QUnit.testDone(function(details) {
    console.log(details);
    if (details.name === 'test1' && details.failed) {
        throw new Error('Cannot proceed because of failure in test1!');
    }
});

QUnit.test('test0', function(assert) {                 
    assert.equal(1,1);
    assert.equal(2,2);
    assert.equal(3,3);
});

QUnit.test('test1', function(assert) {                 
    assert.equal(1,1);
    assert.equal(1,2);
    assert.equal(3,3);
});              

QUnit.test('test2', function(assert) {                 
    assert.equal(4,4);
    assert.equal(5,5);
    assert.equal(6,6);
});

您不会得到任何取消测试的视觉反馈,因为这并不是真正与QUnit UI交互。但是,因为我们抛出了Error对象,您可以打开开发人员控制台并在那里看到输出:

enter image description here

答案 1 :(得分:0)

在测试用例失败后停止QUnit的最佳方法是

QUnit.testDone( function( details ) {
    if (details.failed>0){
        QUnit.config.queue.length = 0;
    }
});