问题描述
用玩笑进行测试时,我的史诗中没有一个运行。
我的商店
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
动作,该动作从未使它到达预期的史诗。在测试环境中没有任何动作。
为什么?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)