2017-12-09 5 views
0

Ich habe den folgenden Code, den ich testen möchte.Unit Test Versprechen Ergebnis innerhalb Event Listener in Knoten

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

Dann habe ich diesen Komponententest.

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); 
    }); 

Dieser Test funktioniert nicht, weil res.end(mockedResponse); nach dem Test beendet ausgeführt wird.

Wie kann ich die Versprechen Antwort testen, nachdem ein Ereignis aufgerufen wird?

Antwort

1

Da es los echte async hier kein Code, das Ergebnis auf die nächste Zecke überprüfen können:

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