如何使用fromEvent()测试Redux Epic?

时间:2018-08-03 00:29:21

标签: unit-testing redux react-redux jestjs

我很难开玩笑地编写单元测试。这是我需要测试的内容,它是在创建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,真的需要帮助。 有人可以帮我吗? 非常感谢!!!

0 个答案:

没有答案