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

如何用jest测试combineReducers
EN

Stack Overflow用户
提问于 2019-03-27 08:50:42
回答 2查看 3.6K关注 0票数 3

我正在尝试测试combineReducers,但得到的错误如下。

TypeError:_testReducer.testReducer.test11不是函数

以下是减速机

代码语言:javascript
复制
// testReducer.js
import { combineReducers } from "redux-immutable";
const test11 = (state, action) => {
 switch (action.type) {
    case "temp11":
      return true;
    default:
      return state;
  }
};
const test22 = (state, action) => {
 switch (action.type) {
    case "temp22":
      return false;
    default:
      return state;
  }
};
export const testReducer = combineReducers({
  test11,
  test22,
});

下面是测试用例

代码语言:javascript
复制
// testReducer.test.js
import { testReducer } from "./testReducer.js";
describe("test for testReducer", () => {
  it("test11", () => {
    const returnTrueValue = true;
    expect(
      testReducer.test11(
        true, {
          type: "temp11",
        }
      )
    ).toEqual(returnTrueValue);
  });
  it("test11", () => {
    const returnFalseValue = false;
    expect(
      testReducer.test22(
        true, {
          type: "temp22",
        }
      )
    ).toEqual(returnFalseValue);
  });
});

如果我导出还原器中的所有函数,并在测试用例中导入单个函数,它就能工作,但这并不是理想的情况。

EN

回答 2

Stack Overflow用户

发布于 2019-03-27 08:59:32

combineReducers返回一个函数,该函数合并了您输入的所有还原器的状态。它不允许您访问单个减速机并单独调用它们。

你应该把它用在你的案子上:

代码语言:javascript
复制
expect(
    testReducer(true, {type: "temp11"}).test11
).toEqual(returnTrueValue);
票数 6
EN

Stack Overflow用户

发布于 2021-05-11 06:47:53

我假设组件减速器如下所示:

代码语言:javascript
复制
export const initialState = {
  totalValue: 0
};

const DashboardReducer = (state = initialState, action: any)=> {
  switch(action.type) {
    case 'case1':
     .......
     .......
     .......
    default:
      return state;
 }

我假设根还原器如下所示:

代码语言:javascript
复制
export const rootReducer = combineReducers({
  dashboard: DashboardReducer
});

测试文件应该如下所示:

代码语言:javascript
复制
import { rootReducer } from './root.reducer';
import { createStore } from 'redux';
import { initialState as dashboardState } from './modules/uv_dashboard/uv_dashboard.reducer';

describe('Root Reducer Suite', () => {

  let store = createStore(rootReducer)

  test('loaded correctly', () => {
    expect(store.getState().dashboard).toEqual(dashboardState);
  });
});
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55373079

复制
相关文章

相似问题

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