用玩笑进行测试时,我的史诗中没有一个运行。
我的商店
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
动作,该动作从未使它到达预期的史诗。在测试环境中没有任何动作。
为什么?