首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >redux saga单元测试预期但收到深度相等错误

redux saga单元测试预期但收到深度相等错误
EN

Stack Overflow用户
提问于 2019-07-22 17:19:33
回答 1查看 1.4K关注 0票数 0

当单元测试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调用。

代码语言:javascript
复制
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

代码语言:javascript
复制
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单元测试

代码语言:javascript
复制
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));
  })
})
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-22 17:28:22

在您的传奇中,您会这样做,不会将任何数据传递给getData:

代码语言:javascript
复制
const data = yield call(api.json.getData);

假设没有传入任何数据是正确的,那么您的测试将需要更新才能匹配,这意味着testData没有用处。删除testData,并修改断言如下:

代码语言:javascript
复制
expect(generator.next().value).toEqual(call(api.json.getData));
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57150863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档