Remove/disconnect epics 来自 redux-observable
Remove/disconnect epics from redux-observable
我们 运行 我们在 Node 中进行集成测试,使用酶的安装和 jsdom 来呈现完整的应用程序。对于每个测试,我们都会创建一个新商店
return createStore(
reducer,
stateShape,
composeEnhancers(
applyMiddleware(epicMiddleware, navMiddleware)
)
);
不幸的是,在进行多次测试时我注意到每个史诗都被附加了多次,所以不是一个史诗表演一个动作,而是 10 个相同的动作!有没有一种方法可以在每次测试结束时 运行 进行清理,以便 epics 分离并且不再收听?
我们正在使用 redux、redux-observable 和 enyzme+mocha 进行测试。谢谢!
每次创建新商店时,您都需要为您提供的 epicMiddleware 创建一个新实例。
或者,epicMiddleware.replaceEpic(rootEpic)
可让您替换当前的 运行 根史诗,但我不确定在这种情况下是否能解决您的问题。
由于 replaceEpic
从 redux-observable@1
开始日落,您将需要使用这里概述的这种方法 w/ BehaviorSubject
和 switchMap
如果您在以后的版本:
https://redux-observable.js.org/docs/recipes/HotModuleReplacement.html
import { rootEpic, anotherRootEpic } from './where-ever-they-are';
import { BehaviorSubject } from 'rxjs';
import { switchMap } from 'rxjs/operators';
const epicMiddleware = createEpicMiddleware();
const store = createStore(rootReducer, applyMiddleware(epicMiddleware));
const epic$ = new BehaviorSubject(rootEpic);
// Every time a new epic is given to epic$ it
// will unsubscribe from the previous one then
// call and subscribe to the new one because of
// how switchMap works
const hotReloadingEpic = (...args) =>
epic$.pipe(
switchMap(epic => epic(...args))
);
epicMiddleware.run(hotReloadingEpic);
// this next line swaps the epic
epic$.next(anotherRootEpic);
我们 运行 我们在 Node 中进行集成测试,使用酶的安装和 jsdom 来呈现完整的应用程序。对于每个测试,我们都会创建一个新商店
return createStore(
reducer,
stateShape,
composeEnhancers(
applyMiddleware(epicMiddleware, navMiddleware)
)
);
不幸的是,在进行多次测试时我注意到每个史诗都被附加了多次,所以不是一个史诗表演一个动作,而是 10 个相同的动作!有没有一种方法可以在每次测试结束时 运行 进行清理,以便 epics 分离并且不再收听?
我们正在使用 redux、redux-observable 和 enyzme+mocha 进行测试。谢谢!
每次创建新商店时,您都需要为您提供的 epicMiddleware 创建一个新实例。
或者,epicMiddleware.replaceEpic(rootEpic)
可让您替换当前的 运行 根史诗,但我不确定在这种情况下是否能解决您的问题。
由于 replaceEpic
从 redux-observable@1
开始日落,您将需要使用这里概述的这种方法 w/ BehaviorSubject
和 switchMap
如果您在以后的版本:
https://redux-observable.js.org/docs/recipes/HotModuleReplacement.html
import { rootEpic, anotherRootEpic } from './where-ever-they-are';
import { BehaviorSubject } from 'rxjs';
import { switchMap } from 'rxjs/operators';
const epicMiddleware = createEpicMiddleware();
const store = createStore(rootReducer, applyMiddleware(epicMiddleware));
const epic$ = new BehaviorSubject(rootEpic);
// Every time a new epic is given to epic$ it
// will unsubscribe from the previous one then
// call and subscribe to the new one because of
// how switchMap works
const hotReloadingEpic = (...args) =>
epic$.pipe(
switchMap(epic => epic(...args))
);
epicMiddleware.run(hotReloadingEpic);
// this next line swaps the epic
epic$.next(anotherRootEpic);