Basicaly我必须测试是否实际调用了应该由事件调用的动作(如果事件被触发,则不会)。例如,我想测试是否在foo
事件上调用了一些方法obj.bar
:
emitter.on('foo', function() { obj.bar(); });
obj
当然对bar
方法有间谍。我已经尝试通过obj.bar
调用.and.callFake
时调用完成回调,但它不起作用,它表示根本没有调用obj.bar
。实际代码如下所示(我使用的是ES6)
it('rejects invalid packet', done => {
let packet = client.fake('system/login', { // fakes incoming packet by calling proper event.
email: 'nope@test.dev'
});
client.reply.and.callFake(() => done());
expect(client.reply).toHaveBeenCalledWith(packet, 'system/login', {
code: ResponseCode.INVALID_PACKET
});
});
如何正确确保在事件(或任何其他异步方法)上调用间谍?