NGRX 8: протестируйте эффект, отправляющий действие - PullRequest
0 голосов
/ 15 октября 2019

Я хотел бы проверить, что эффект отправляет действие. Логично, что приведенный ниже тест выдает ошибку, сообщающую, что createActionSuccess не является шпионом. Проблема в том, что я не знаю, смогу ли я spyOn createOperationSuccess.

describe('[OPERATION] Create Operation', () => {
    it(' should trigger createoperation from operation service', (done) => {
      actions$ = of({type: createOperation.type, operation: CreateOperationDTOMock});
      spyOn(service, 'create').and.callThrough();
      effects.createOperation$.subscribe(t => {
        expect(service.create).toHaveBeenCalledWith(CreateOperationDTOMock);
        expect(createOperationSuccess).toHaveBeenCalledWith({operation_id: OperationMock._id});
        done();
      });
    });
 });

Действие createOperationSuccess:

export const createOperationSuccess = createAction(
  '[OPERATION] Create Operation Success',
  props<{ operation_id: string }>()
);

Эффект createOperation:

createOperation$ = createEffect(() =>
    this.actions$.pipe(
      ofType(createOperation),
      concatMap(payload => {
        return this.operationService
          .create(payload.operation)
          // I want to test that line below saying that createOperationSuccess has been triggered.
          .pipe(map(operation_id => createOperationSuccess({ operation_id })));
      })
    )
);

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

1 Ответ

1 голос
/ 15 октября 2019
// create an actions stream and immediately dispatch a GET action
actions$ = of({ type: 'GET CUSTOMERS' });

// mock the service to prevent an HTTP request
customersServiceSpy.getAllCustomers.and.returnValue(of([...]));

// subscribe to the Effect stream and verify it dispatches a SUCCESS action
effects.getAll$.subscribe(action => {
  expect(action).toEqual({
    type: 'GET CUSTOMERS SUCCESS',
    customers: [...],
  });
});

https://ngrx.io/guide/effects/testing

...