首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用jest测试reducers

如何使用jest测试reducers
EN

Stack Overflow用户
提问于 2020-05-07 00:44:40
回答 1查看 254关注 0票数 0

我有这个减速器:

代码语言:javascript
复制
import { fromJS } from 'immutable';
import { DEFAULT_ACTION, SOURCES_LOADED, SOURCES_REQUEST } from './constants';

export const initialState = fromJS({
  sources: null,
  loading: false
});

function appReducer(state = initialState, action) {
  switch (action.type) {
    case SOURCES_REQUEST:
      return state
        .set('loading', true);
    case SOURCES_LOADED:
      return state
        .set('sources', action.payload.sources)
        .set('loading', false);
    case DEFAULT_ACTION:
      return state;
    default:
      return state;
  }
}

export default appReducer;

这个测试:

代码语言:javascript
复制
import { fromJS } from 'immutable';
import reducer from '../reducer';
import * as types from '../constants';

describe('application reducers', () => {
  it('should return the initial state', () => {
    expect(reducer(undefined, {})).toEqual(fromJS(
      {
        sources: null,
        loading: false
      }
    ));
  });

  it('should handle the sources request', () => {
    expect(reducer({ loading: true }, {
      type: types.SOURCES_REQUEST
    })).toEqual(fromJS({ loading: true }));
  });
});

第二个测试失败了:

代码语言:javascript
复制
TypeError: state.set is not a function

      11 |     case SOURCES_REQUEST:
      12 |       return state
    > 13 |         .set('loading', true);
         |          ^
      14 |     case SOURCES_LOADED:
      15 |       return state
      16 |         .set('sources', action.payload.sources)

我如何才能将测试添加到这些reducers中,因为这是redux传奇,而且我正在遵循这个https://redux.js.org/recipes/writing-tests,因为它是我找到的更接近我需求的文档。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-07 00:52:50

您的reducer期望它接收的state是一个immutable对象。

但是在您的第二个测试中,您向它传递了一个普通的javascript对象,该对象没有您试图调用的.set方法。

代码语言:javascript
复制
it('should handle the sources request', () => {
  expect(reducer(fromJS({
    loading: true
  }), {
    type: types.SOURCES_REQUEST
  })).toEqual(fromJS({
    loading: true
  }));
});

或者,在本例中,您可以向其传递undefined,而reducer将使用initialState

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61640576

复制
相关文章

相似问题

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