【发布时间】:2018-02-15 00:08:49
【问题描述】:
假设我的代码中有一个对象,假设是一个用户。
User 是一个 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 并希望在给定时间内调用该函数。
但我想知道是否有更好、更优雅的方式来做到这一点。
【问题讨论】:
标签: javascript node.js sinon eventemitter