testing - 使用来自请求的动态负载测试 redux saga
问题描述
我正在尝试使用 redux-saga-test-plan 来理解测试,但我有点卡在动态有效负载上。
这是我的传奇:
function* getCheapCars() {
try {
const response = yield call(fetch, '/api/home')
const cars = yield call([response, response.json])
yield put({ type: types.FETCH_DATA_SUCCESS, cars })
} catch (error) {
yield put({ type: types.FETCH_DATA_ERROR, error })
}
}
这是测试:
it('just works!', () => {
return expectSaga(saga)
.take('FETCH_DATA_SUCCESS')
.put({ type: 'FETCH_DATA_SUCCESS', cars })
.dispatch({ type: 'FETCH_DATA_SUCCESS', cars })
.run()
})
我可能错了(我对 saga 完全陌生),但是如何从请求中获取动态有效负载 - 在这种情况下是汽车。Cars 代表多个“帖子”的数组,其中包含 title、slug、id 和许多其他字段。我应该只创建一个具有完全相同字段的假对象吗?
在使用Reducer 进行测试时,我需要一些帮助,基本上这是相同的传奇,并且这个测试通过了,但它不应该。因为我不希望有一个空的项目数组,而是长度为 4 的数组(汽车)。
it('just works!', async () => {
const { storeState } = await expectSaga(saga)
.withReducer(reducer)
.run()
expect(storeState).toEqual({
loading: false,
error: null,
items: []
})
})
有什么我不明白的吗?提前致谢。
解决方案
我在使用 redux-saga-test-plan 进行 saga 测试时所理解的是,我们应该模拟我们的 api 调用和 select 调用。
Mock 是通过 provide 方法完成的,所以不会调用真正的 api。
const mockResponse = []; // your api response
it('getCheapCars test', () => expectSaga(getCheapCars)
.provide([
[call(fetch, '/api/home'), mockResponse],
])
.put({ type: types.FETCH_DATA_SUCCESS, cars: mockResponse })
.run())
推荐阅读
- r - 安装 R 包“ld:警告:找不到选项的目录”时出现问题
- .net-core - VS 2019 C# 控制台 netcore 3 应用程序未调试
- google-cloud-platform - 使所有域的名称服务器回复相同
- excel - 如果文件夹名称相同,则替换文件夹
- ruby-on-rails - 音频不适用于heroku上的rails应用程序
- sql - SQL 可行性:可以按值挤出行并以自定义方式组合表吗?
- javascript - 在输入中格式化数字(掩码)
- python - 在 Python 中从字符串中去除非字母字符的代码
- flutter - 如何重建提供者选择器但不重建它们的孩子
- jenkins - 依赖于 Jenkins 构建布尔参数的表达式在管道中不起作用