我很难开玩笑地编写单元测试。这是我需要测试的内容,它是在创建MediaRecorder之后配置websocket的。
const createWebcamProducerWebSocketEpic: Epic<MyAction, MyState> = (action$, store) =>
action$.ofType(WEBCAM_PRODUCER_MEDIA_RECORDER_CREATED)
.filter(() => !isNil(store.getState().webcamProducer.webcamProducerMediaRecorder))
.mergeMap(() => {
const ws = new WebSocket(InterMediateServerAddress.LOCAL);
ws.onopen = () => {
store.getState().webcamProducer.webcamProducerMediaRecorder.start(70);
};
return observableMerge (
Observable.of(createdWebcamProducerWebSocket(ws)),
fromEvent(ws, 'error').map(() => webSocketConnectionError(new Error())),
fromEvent(ws, 'close', (event) => {
// code 1000: websocket normal stop
console.log('close');
if (event.code !== 1000) {
return webSocketConnectionError(new Error());
}
})
);
});
我已经创建了自己的名为MockWebSocket和
的websocket。it('should dispatch a createdWebcamProducerWebSocket action and pass the Websocket', async () => {
global.WebSocket = MockWebSocket;
const defauteState = {
webcamProducer: {
webcamProducerMediaRecorder: new MockMediaRecorder(),
webcamProducerWebSocket: null
}
};
store = mockstore(defauteState);
store.getState().webcamProducer.webcamProducerMediaRecorder.start = jest.fn();
await store.dispatch(action);
expect(store.getActions()[0]).toEqual(action);
expect(store.getActions()[1].type).toEqual("WEBCAM_PRODUCER_WEB_SOCKET_CREATED");
expect(store.getActions()[1].payload).toBeInstanceOf(MockWebSocket);
expect(store.getState().webcamProducer.webcamProducerMediaRecorder.start).toHaveBeenCalled();
我不知道如何测试这两个fromEvent,真的需要帮助。 有人可以帮我吗? 非常感谢!!!