unit testingnodejs事件

我正在使用本答案中解释的解决scheme来解释我的节点应用程序中的unit testing事件。

但是,setTimeout函数永远不会调用,所以我的testing通过时,他们应该失败。

这里是一个例子:

suite('myTests', function() { test('myFunction_whenCalled_emitsEvent', function() { var myClass = new MyClass(); var eventTimeout = setTimeout(function() { assert(false); }, 1000); myClass.on('something', function() { clearTimeout(eventTimeout); }); myClass.doSomething(); // this does not emit the 'something' event }); }); 

我预计这会失败,1秒钟后,只要事情没有发生。

我在assert(false)行放置了一个断点,它从来没有被打中。

有人能指出我正确的方向吗? 谢谢。

您必须使用donecallback来显示您的testing已完成。 像这样的东西:

 suite('myTests', function() { test('myFunction_whenCalled_emitsEvent', function(done) { var myClass = new MyClass(); myClass.on('something', function() { done(); }); myClass.doSomething(); }); }); 

看起来你只是testing事件是否发射。 如果是这种情况,那么整个setTimeout事物是不必要的。 摩卡本身会超时,如果没有默认超时(2000毫秒,如果我没记错的话)没有完成。

你的代码的设置方式,摩卡只会安排你的事件,然后退出testing。 由于排定事件成功,摩卡会称testing成功。