2017-12-09 18 views
0

다음 코드를 테스트하고 있습니다.노드의 이벤트 수신기 내부에서 단위 테스트 약속 결과

emitter.on("request", function(req, res) { 
    mock_finder.getMockedResponse().then((mockedResponse) => { 
     res.end(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); 
    }); 

이 테스트는 작동하지 않습니다.

이벤트가 호출 된 후 약속 응답을 테스트하려면 어떻게해야합니까?

답변

1

실제 비동기 코드가 다음 틱에 결과를 확인할 수 있습니다, 여기에 않을 거기 감안할 때 :

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