当单元测试redux中的简单api调用时,会得到此错误。
我的特性>测试api调用 预期(接收).toEqual(预期) //深度相等-预期+接收对象{“@redux-saga/IO”:true,"combinator":false,“有效载荷”:对象{- "args":数组-对象{-“完成”:false,"id":1,-“标题”:"delectus aut autem",- "userId":1,- },-,+ "args":数组[],“上下文”:null,"fn":函数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));
})
})发布于 2019-07-22 17:28:22
在您的传奇中,您会这样做,不会将任何数据传递给getData:
const data = yield call(api.json.getData);假设没有传入任何数据是正确的,那么您的测试将需要更新才能匹配,这意味着testData没有用处。删除testData,并修改断言如下:
expect(generator.next().value).toEqual(call(api.json.getData));https://stackoverflow.com/questions/57150863
复制相似问题