使用redux-saga-test-plan测试all effect出现effect不匹配如何解决?
问题原因
- 你的
testSaga断言中给.all()传入的是对象结构,但原generator函数里yield all的参数是数组结构,二者结构不匹配,所以触发effect不匹配的报错。 - 你注释中保留的原生断言写法是正确的,用的就是和原代码一致的数组结构,所以可以正常运行。
解决方法
修正测试用例中.all()的入参结构,和原saga代码保持一致即可,完整修正后的测试代码如下:
import {expectSaga, testSaga} from 'redux-saga-test-plan'; import gatawayFlow, {getGatewaysFlow, selectGatewayFlow} from '../logic/sagas'; import * as actionTypes from '../logic/actionTypes'; import {takeEvery, takeLatest} from '@redux-saga/core/effects'; // 单元测试 describe('Unit tests', () => { test('Test all effect', () => { const saga = testSaga(gatawayFlow); saga .next() .all([ takeEvery(actionTypes.GET_GATEWAYS_REQUEST, getGatewaysFlow), takeLatest(actionTypes.SELECT_GATEWAY_REQUEST, selectGatewayFlow) ]) .next() .isDone(); }); });
补充说明
testSaga属于严格快照式测试,要求断言的effect类型、入参结构、取值完全和saga运行时yield出来的值一致,才会判定测试通过。
内容的提问来源于stack exchange,提问作者Elli Zorro
相关产品推荐
相关产品推荐

