Как переопределить параметры состояния по умолчанию в редукторных редукторах? - PullRequest
0 голосов
/ 06 июня 2018

У меня есть что-то вроде этого.Предположим, что следующий файл 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;

Я вызываю вышеуказанный редуктор в тестовом файле следующим образом.

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 в моем тестовом случае.Так как это сделать.Пожалуйста, помогите мне.

Заранее спасибо.

1 Ответ

0 голосов
/ 06 июня 2018

Во-первых, ваш редуктор написан неправильно.Строка state.someCategory = action.someCategoryData; изменяет существующий параметр state - не делайте этого!Вместо этого вы должны сделать копию объекта state и перезаписать поле someCategoryData в копии.См. Примеры неизменных шаблонов обновления в документации Redux.

Во-вторых, когда вы используете combineReducers, вы говорите, что ожидаете, что этот редуктор слайсов будет обрабатывать один конкретный ключ /кусочек гос.Когда вы запускаете combineReducers({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 отдельно в виде именованного экспорта, чтобы вы могли протестировать ее самостоятельно и экспортировать комбинированныйредуктор как экспорт по умолчанию.Я бы также предложил прочитать раздел Using combineReducers в Redux docs.

...