Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何覆盖redux还原器中的默认状态参数?_Javascript_Reactjs_Unit Testing_Redux_Jestjs - Fatal编程技术网

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。实际上,源代码不是我的。我不能出口它。我必须找到一些方法来编写单元测试用例,而不必导出减速机。