Javascript 如何覆盖redux还原器中的默认状态参数?
我有这样的东西。假设以下文件是Javascript 如何覆盖redux还原器中的默认状态参数?,javascript,reactjs,unit-testing,redux,jestjs,Javascript,Reactjs,Unit Testing,Redux,Jestjs,我有这样的东西。假设以下文件是reducers123.js import {combineReducers} from 'redux'; import * as types from './actionTypes'; function reducer1(state = { someId: 0, someCategory: [] }, action) { switch(action.type) { 'someActionType1' : stat
reducers123.js
import {combineReducers} from 'redux';
import * as types from './actionTypes';
function reducer1(state = {
someId: 0,
someCategory: []
}, action) {
switch(action.type) {
'someActionType1' :
state.someCategory = action.someCategoryData;
break;
'someActionType2' :
state.id = action.someId;
break;
}
}
const appReducer = combineReducers({reducer1});
export default appReducer;
我在测试文件中调用上面的reducer,如下所示
import reducers from `./reducers123.js`;
describe('some reducer test case', () => {
it('test case', () => {
reducers({someCategory: ['d1', 'd2', 'd3']}, {type: 'someActionType1'});
});
});
所以这里它应该将someCategory
数据作为['d1',d2',d3']
但是它使用的是我最初定义的空数组[]。我需要在测试用例中重写someCategory
数组的值。那么怎么做呢。请帮帮我
提前谢谢。首先,您的减速机写错了。行
state.someCategory=action.someCategoryData代码>正在变异现有的状态
参数-不要这样做!相反,您应该复制状态
对象,并覆盖副本中的someCategoryData
字段。有关示例,请参见Redux文档中的页面
其次,当您使用combinereducer
时,您的意思是希望这个片减缩器处理状态的一个特定键/片。当您运行combinereducer({reducer1})
时,您正在定义一个状态形状,该形状是一个对象,其中的键为reducer1
。因此,您的测试需要传入如下对象:
const testState = {
reducer1 : {
someId : 123,
someCategory : ["d1", "d2", "d3"]
}
}
const result = reducers(testState, {type : "someActionType1"});
// assert that the result is what you expect
我建议将reducer
函数单独导出为命名导出,以便您可以单独测试它,并将组合的reducer导出为默认导出。我还建议阅读Redux文档中的部分。谢谢@markerikson。实际上,源代码不是我的。我不能出口它。我必须找到一些方法来编写单元测试用例,而不必导出减速机。