reactjs - redux saga 单元测试预期但收到深度相等错误
问题描述
在 redux saga 中对简单的 api 调用进行单元测试时出现此错误。
● 我的功能 › 测试 api 调用
expect(received).toEqual(expected) // deep equality - Expected + Received Object { "@@redux-saga/IO": true, "combinator": false, "payload": Object { - "args": Array [ - Object { - "completed": false, - "id": 1, - "title": "delectus aut autem", - "userId": 1, - }, - ], + "args": Array [], "context": null, "fn": [Function getData], }, "type": "CALL", }
我有这样设置的api调用。
import axios from 'axios';
export default {
json: {
getData: () => axios.get('https://jsonplaceholder.typicode.com/todos').then(res => res.data.slice(0, 1)),
},
};
此 api 调用在 redux-saga 函数中使用。
Redux-saga
import {
put, fork, takeLatest, call,
} from 'redux-saga/effects';
import { GET_DATA_SAGA } from '../actions/types';
import api from '../api';
import { fetchDataSuccess, fetchDataError } from '../actions/dataActions';
export function* getData() {
try {
const data = yield call(api.json.getData);
console.log(data);
yield put(fetchDataSuccess(data));
} catch (err) {
yield put(fetchDataError(err));
}
}
export function* watchData() {
yield takeLatest(GET_DATA_SAGA, getData);
}
export default function* () {
yield fork(watchData);
}
我应该如何正确地进行单元测试,我错过了什么吗?
我也在参考这个教程
https://codeburst.io/how-i-test-redux-saga-fcc425cda018
redux-saga 单元测试
import {
put, fork, takeLatest, call,
} from 'redux-saga/effects';
import { GET_DATA_SAGA } from '../actions/types';
import {expectSaga} from 'redux-saga-test-plan';
import { fetchDataSuccess, fetchDataError } from '../actions/dataActions';
import api from '../api';
import { cloneableGenerator } from '@redux-saga/testing-utils';
import {getData} from './data';
const testData = {
userId: 1,
id: 1,
title: "delectus aut autem",
completed: false
}
describe('My feature', () => {
it('testing api call', () => {
// const data = getData(api.json.getData);
// console.log(data)
const generator = cloneableGenerator(getData)(fetchDataSuccess)
// console.log(generator)
expect(generator.next().value).toEqual(call(api.json.getData, testData));
})
})
解决方案
在你的传奇中,你会这样做,没有数据被传递给 getData:
const data = yield call(api.json.getData);
假设没有数据传入是正确的,那么您的测试将需要更新以匹配,这意味着 testData 没有用。删除testData,修改断言为:
expect(generator.next().value).toEqual(call(api.json.getData));
推荐阅读
- python - 如何使用 bs4 从网站获取表格数据
- java - 我如何在应用内结算 v3 中使用 consumePurchase 方法
- python - 不明白为什么我的“if”语句不起作用
- pandas - python,有没有更简单的方法来分割数据点?
- c - 使用 GENERIC_ALL 访问权限在 ProjectedFS 中打开文件(投影文件系统)
- unity3d - Uniyt Photon PUN RPC 只能在房间内使用?
- python - 如何找到给定数组无法计算的最大数量?
- javascript - 在每个 i 值处使用 for 循环乘以一个数字
- java - 如何从 url 中过滤 txt
- bash - 如何“for f loop”并删除空行