如何用 jest 测试 combineReducers
Posted
技术标签:
【中文标题】如何用 jest 测试 combineReducers【英文标题】:how to test combineReducers with jest 【发布时间】:2019-08-17 18:38:31 【问题描述】:我正在尝试测试 combineReducers 但出现以下错误。
TypeError:_testReducer.testReducer.test11 不是函数
下面是reducer
// 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,
);
下面是测试用例
// 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);
);
);
如果我在 reducer 中导出所有函数并在测试用例中导入单个函数,它会起作用,但这不是想法案例。
【问题讨论】:
【参考方案1】:combineReducers
返回一个函数,该函数合并了您放入其中的所有减速器的状态。它不允许您访问单个减速器并单独调用它们。
您应该以这种方式使用它:
expect(
testReducer(true, type: "temp11").test11
).toEqual(returnTrueValue);
【讨论】:
@swapnilpatil24 很高兴它有帮助:) 欢迎您接受答案作为解决方案【参考方案2】:我假设组件化简器如下所示:
export const initialState =
totalValue: 0
;
const DashboardReducer = (state = initialState, action: any)=>
switch(action.type)
case 'case1':
.......
.......
.......
default:
return state;
我假设 root reducer 如下所示:
export const rootReducer = combineReducers(
dashboard: DashboardReducer
);
测试文件应如下所示:
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);
);
);
【讨论】:
以上是关于如何用 jest 测试 combineReducers的主要内容,如果未能解决你的问题,请参考以下文章
如何用 jest 在服务 (NestJS) 中测试模型 (Mongoose)