如何测试回调*不会运行?

时间:2014-06-23 12:42:42

标签: javascript node.js unit-testing mocha

我想在测试期间测试特定功能不会运行回调。例如,在下面的简化代码中,checker.check()检查数字,此特定测试中给出的数字不应运行回调。

test('Do not raise false alerts', function(done){
    var checker = setupChecker(function(){
        done('bad alert')
    })
    checker.check(60)
    checker.check(70)
    checker.check(80)
})

基本上,如果永远不会调用done(),我希望测试超时。

我当然可以为此目的使用setTimeout(),但我认为Mocha可能会为此目的而内置。

我还可以在checker()中添加第二个回调函数,以便何时不应该发出警报,但这会让我感到震惊test-induced design damage而我想避免这种情况。

1 个答案:

答案 0 :(得分:0)

这种断言的最佳位置是exit事件process,因为之后什么都不会发生(好吧,除了其他exit听众之外,请记住这一点):< / p>

test('Do not raise false alerts', function(){
    var badAlert = false;
    var checker = setupChecker(function(){
        badAlert = true
    })

    process.on('exit', function () {
      assert.ok(!badAlert);
    });


    checker.check(60)
    checker.check(70)
    checker.check(80)
})

不幸的是,这种模式对mocha的效果并不好。它将显示测试通过,然后在发生故障时进行堆栈跟踪。