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()
});
})
我有以下代码要测试。
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()
});
})