【问题标题】:Nodejs, Sinon: How to test some functions are called upon an eventNodejs,Sinon:如何测试一些函数被事件调用
【发布时间】: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


    【解决方案1】:

    问题不同。

    注册到处理程序的代码在生成存根之前执行。 (所以这个函数还不是间谍)

    因此,请确保运行存根,仅在运行注册到 evetns 的应用程序中的其余代码之后。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-08
      • 1970-01-01
      • 1970-01-01
      • 2014-08-08
      • 1970-01-01
      相关资源
      最近更新 更多