下面是一个简单的api调用。
api
import axios from 'axios';
export default {
json: {
getData: () => axios.get('https://jsonplaceholder.typicode.com/todos').then(res => res.data.slice(0, 5)),
},
};此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);
}我怎样才能测试这个函数。我看到了一些指南,但我并没有偶然发现一个不复杂的单元测试。
到目前为止,这是我的单元测试,这是我得到的结果。
redux-saga单元测试
import {put, fork, takeLatest, call} from 'redux-saga/effects';
import axios from 'axios';
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 {getData} from './data';
it('testing api call', () => {
return expectSaga(api.json.getData)
})发布于 2019-07-22 16:13:00
如果您有任何参数要传递给您的生成器函数,您可以这样做。要进入下一个声明,您只需继续编写generator.next()。对你来说,下一个可能是动作fetchDataSuccess。
import {put, fork, takeLatest, call} from 'redux-saga/effects';
import axios from 'axios';
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 {getData} from './data';
describe('My feature', () => {
it('testing api call', () => {
const generator = getData();
expect(generator.next()).to.equal(yourApiResponse);
})
})
https://stackoverflow.com/questions/57149835
复制相似问题