Node 事件监听器中的单元测试承诺结果

Unit test promise result inside Event Listener in Node

我有以下代码要测试。

emitter.on("request", function(req, res) {
    mock_finder.getMockedResponse().then((mockedResponse) => {
       res.end(mockedResponse);
    });
  });

然后,我有这个单元测试。

it("should return mocked response", () => {
    // given
    const mockedResponse = {
      success: true
    };
    mock_finder.getMockedResponse.mockImplementation(() => Promise.resolve(mockedResponse));
    const res = {
      end: jest.fn()
    }
    // when
    emitter.emit('request', req, res);
    // then
    expect(res.end).toHaveBeenCalledWith(mockedResponse);
  });

此测试无效,因为 res.end(mockedResponse); 是在测试完成后执行的。

如何在调用事件后测试承诺响应?

鉴于这里没有真正的异步代码,您可以在下一个滴答时验证结果:

if('should return mocked response', done => {
   ...
   emitter.emit('request', req, res);
   process.nextTick(() => {
     expect(res.end).toHaveBeenCalledWith(mockedResponse);
     done()
   });
})