无法在测试环境中执行可观察到的Redux的史诗

时间:2020-09-29 08:31:03

标签: reactjs jestjs redux-observable

用玩笑进行测试时,我的史诗中没有一个运行。

我的商店

const rootEpic = combineEpics(authEpic, initEpic, filterEpic);

const epicMiddleware = createEpicMiddleware<PayloadAction, PayloadAction>();

export const makeStore = (preloadedState?: DeepPartial<State>) =>
    configureStore({
        reducer,
        middleware: [epicMiddleware, errorLoggingMiddleware],
        devTools: process.env.NODE_ENV !== "production",
        preloadedState,
    });
export const store = makeStore();

epicMiddleware.run(rootEpic); 

测试

import { render } from "@testing-library/react";
//....
test("does not apply default filters when using one datasource", async () => {
  const initialState = ({
        filters: {
            id: "test",
            applied: [],
        },
        sessions: {
            test: {
                token: "token",
                id: "test",
                expiryDate: new Date(),
            },
        },
        objects: {},
    } as any) as State;

    const store = makeStore(initialState);
    render(
        <Provider store={store}>
// when container is mounted, it will dispatch an initDefaultFilters action.
// this action should **not** apply any of the filters.
            <Container pageId={pageId} /> 
        </Provider>
    );
    expect(store.getState().filters.applied.length).toBe(0);
});

史诗般的动作

export const initEpic: Epic<
    PayloadAction<{ dataSources: DataSourceType[]; modifiedFilters: FilterItem[] }>,
    any,
    State
> = action$ =>
    action$.ofType(initializeDefaultFilters.type).pipe(
        switchMap(({ payload: { dataSources, modifiedFilters } }) => {
            return action$.ofType(openedSession.type).pipe(
                map(() => {
                    if (dataSources.length > 1) {
                        return applyFilters({ dataSources, item: modifiedFilters });
                    }
                }),
                filter(s => s !== undefined),
            );
        }),
    );

我所有的异步api调用(获取,阿波罗...)都被模拟了,并且在Container组件内部的某个地方,我正在分派initDefaultFilters动作,该动作从未使它到达预期的史诗。在测试环境中没有任何动作。

为什么?

0 个答案:

没有答案