2017-12-09 4 views
0

次のコードをテストします。ノード内のイベントリスナ内でユニットテストの結果が得られます

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);が実行されるため、このテストは機能しません。

イベントが呼び出された後に約束応答をテストするにはどうすればよいですか?

答えて

1

ここで起こって本当の非同期コードはありません考えると、あなたは次の目盛りに結果を確認することができますが:

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