假设我的代码中有一个对象,请说用户。
用户是一个eventEmitter,因此在我喜欢的代码的许多地方:
User.on('register', notifyFriends);
User.on('register', sendWelcomeEmail);
这些行原则上位于不同的文件中。
我想确保在我的测试中调用相关函数,所以我做了类似的事情:
describe('User Events', () => {
before(() => {
sinon.stub(userListeners, 'notifyFriends').callsFake(async () => {});
});
after(() => {
userListeners.notifyFriends.restore();
});
describe('register', () => {
it('should trigger the "notifyFriends" handler once user is registered', () => {
UserModel.emit('register');
expect(userListeners.notifyFriends).to.be.calledOnce();
});
});
});
问题是函数在expect语句之后运行,因此测试显然失败了。
解决问题的一种简单方法是在Timeout块中运行expect,并希望在给定时间内调用该函数。
但我想知道是否有更好,更优雅的方式来做。
答案 0 :(得分:0)
问题不同。
注册到处理程序的代码是在创建存根之前执行的。 (所以这个功能还不是间谍)
因此,请确保仅在运行注册到evetns的应用程序中的其余代码之后运行存根。