reactjs - redux-saga "all + takeEvery" 单元测试
问题描述
我是新来的反应。请帮助我进行 redux-saga/effecs 的单元测试。假设我对分离功能有 redux 效果
export function* appEffects() {
yield all([
takeEvery(Types.CONFIGURE_LANGUAGE, configureLanguage),
// other effects for this feature (removed to simplify example)
]);
}
function* configureLanguage(action: Actions.ConfigureLanguageAction) {
const currentLanguage: string = 'en'; // simplified example
yield put({ type: Types.SET_CURRENT_LANGUAGE, payload: currentLanguage });
}
我可以configureLanguage
直接用下面的代码测试
import { runSaga } from 'redux-saga';
async function recordSaga(saga: any, initialAction: any) {
const dispatched: any = [];
await runSaga(
{ dispatch: (action: any) => dispatched.push(action) },
saga,
initialAction
).toPromise;
return dispatched;
}
it('should configure language', async () => {
const action = appActions.service.configureLanguage('en');
const dispatched = await recordSaga(
configureLanguage
action
);
expect(dispatched).toEqual([{ type: Types.SET_CURRENT_LANGUAGE, payload: 'en' }]);
});
我该如何configureLanguage
测试appEffects
?如果我尝试
const dispatched = await recordSaga(
appEffects
action
);
我收到dispatched === []
解决方案
您没有调用该toPromise
方法来返回承诺 - 现在您正在调用await
该toPromise
方法本身,因此在完成recordSaga
之前继续,因此当您到达.runSaga
dispatched
expect
async function recordSaga(saga: any, initialAction: any) {
const dispatched: any = [];
await runSaga(
{ dispatch: (action: any) => dispatched.push(action) },
saga,
initialAction
).toPromise(); // update here
return dispatched;
}
推荐阅读
- php - 在 OctoberCMS 中将树枝可变数据传递给 php 代码块
- calendar - Microsoft Graph api 创建日历但 ErrorAccessDenied?
- android - Android studio 音乐播放器:无法打开应用
- reactjs - my 是我的 setMyToken 状态函数未设置
- json - 在Angular 6中导入Json文件?
- xaml - UWP:担心带有 GridView 的 itemtemplateselector
- batch-file - echo %variables% 不获取变量的数据
- sql - 实体框架核心:如何在 Linq 中使用 DateDiff?
- css - 如何在没有任何 css 的情况下渲染 React material-ui 组件?
- google-sheets - 在 Google 表格的一个单元格中连接多个超链接