GET_SUCCESS в тесте редуктора возвращает неопределенное значение - PullRequest
0 голосов
/ 14 апреля 2020
 it(`should handle ${GET_POSTAL_SUCCESS}`, () => {
      const payload = {
        postalCode: {
          postalInfo: {
            postalCode: '5282',
          },
        },
      };

      expect(reducer(state, { type: GET_POSTAL_SUCCESS, payload })).toEqual({
        ...state,
        postalInfo: payload.postalCode,
        loading: false,
      })
    });

Первое получено, а второе ожидается в блоке кода. По какой-то причине он не будет хорошо форматироваться здесь.

Ошибка: ожидаемо (получено) .toEqual (ожидаемо) // глубокое равенство

- ожидаемо

+ Получено

 *Object {
    "loading": false,
-   "postalInfo": Object {
-     "postalInfo": Object {
-       "postalCode": "5282",
-     },
-   },*


**+   "postalInfo": undefined,**
  }

Почему postalInfo не будет определен в полученном с этим блоком кода? Я просто не понимаю

 expect(reducer(state, { type: GET_POSTAL_SUCCESS, payload }))

Вот мой оригинальный редуктор:

function reducer(state = defaultState, action) {
  switch (action.type) {
    case constants.GET_POSTAL:
      return {
        ...defaultState,
        code: action.code,
        loading: true,
      };
    case constants.GET_POSTAL_SUCCESS:
      return {
        ...state,
        postalInfo: action.payload.result,
        loading: false,
      };

А вот весь мой тест до сих пор:

 let state = reducer(undefined, {});

  it('should have initial state', () => {
    expect(state).toBeDefined();
  });


  describe('get postals', () => {

    it(`it should handle ${GET_POSTAL}`, () => {
      const code = '5282';
      expect(reducer(state, { type: GET_POSTAL, code })).toEqual({
        ...state,
        code,
        loading: true,
      });
    });

    it(`should handle ${GET_POSTAL_SUCCESS}`, () => {
      const payload = {
        postalCode: {
          postalInfo: {
            postalCode: '5282',
          },
        },
      };

      expect(reducer(state, { type: GET_POSTAL_SUCCESS, payload })).toEqual({
        ...state,
        postalInfo: payload.postalCode,
        loading: false,
      })
    });

1 Ответ

1 голос
/ 14 апреля 2020

В вашем редукторе в случае успеха вы устанавливаете состояние как action.payload.result:

case constants.GET_POSTAL_SUCCESS:
  return {
    ...state,
    postalInfo: action.payload.result,
    loading: false,
};

Но в вашем тестовом примере вы генерируете полезную нагрузку следующим образом:

const payload = {
  postalCode: {
    postalInfo: {
      postalCode: '5282',
    },
  },
};

У него должно быть свойство result в полезной нагрузке, поскольку ваш редуктор ожидает его:

const payload = {
  result: {
    postalInfo: {
      postalCode: '5282',
    },
  },
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...