测试具有api调用的redux-saga函数

时间:2019-07-22 16:04:15

标签: reactjs redux redux-saga

这是一个简单的api调用。

api

 cmbBox.DataSource = new BindingSource(comboSource , null);
 cmbBox.DisplayMember = "Value";
 cmbBox.ValueMember = "Key";

此api调用在redux-saga函数中使用。

Redux-saga

import axios from 'axios';   
export default {
  json: {
    getData: () => axios.get('https://jsonplaceholder.typicode.com/todos').then(res => res.data.slice(0, 5)),
  },
};

我将如何测试此功能。我看过一些指南,但是我并没有偶然发现不复杂的单元测试。

到目前为止,这是我的单元测试,这是我得到的结果。

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);
}

1 个答案:

答案 0 :(得分:1)

您可以像这样简单地进行操作,如果您有任何要传递给生成器函数的参数,则可以。 转到下一个声明,您只需要继续编写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 = fetchDataSuccess();
    expect(generator.next()).to.equal(yourApiResponse);
  })
})