тестирование ngrx: отправление действий и ожидание магазина - PullRequest
1 голос
/ 07 ноября 2019

Можно ли отправить действие внутри теста и ожидать магазина без эффектов теста, редукторов, селекторов? Я действительно не могу найти хороший пример, поэтому мне интересно, что является лучшим методом для тестирования ngrx.

Есть идеи? заранее спасибо

1 Ответ

0 голосов
/ 08 ноября 2019

«Магазин» - это термин, обозначающий всю вашу систему NgRx. Редуктор - это то, что производит состояние. Я думаю, что вы хотите проверить, как ваши действия производят состояние. Для этого вам нужно сосредоточиться на «создателе состояния», которым вы являетесь редуктор

Редуктор - это функция. Рассмотрим этот простой пример, где я активирую «продукт», который я хочу проверить, когда при появлении действия ActivateProduct мое состояние загрузки устанавливается в значение true

export function productActivationReducer(state = initialState, action: ProductActivationActions): ProductActivationState {
  switch (action.type) {
    case ProductActivationActionTypes.ActivateProductSuccess:
      return {
        isLoading: true,
        error: null,
        data: action.payload,
      };

    default:
      return state;
  }
}

Ваш редуктор является функцией. Функция может быть вызвана с помощью. Я создал бы тест, который вызвал бы функцию и проверил бы, какое состояние возвращается.

import { productActivationReducer, initialState } from './product-activation.reducer';

  describe('ActivateProductSuccess', () => {
    it('should set the next state', () => {
      action = new ActivateProductSuccess({ foo: 'bar'});
      result = productActivationReducer(initialState, action);
      expect(result.data).toEqual({ foo: 'bar'});
      expect(result.error).toBeNull();
      expect(result.loading).toBe(true);
    });
  });

...