тестирование эффекта нгркс с жасминовым мрамором - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть следующий довольно стандартный эффект:

@Injectable()
export class ToDoEffects {

      @Effect()
      getToDoEntries$ = this.actions$.
        pipe(
          ofType(ToDoActionTypes.LoadToDoEntries),
          switchMap(_ => this.toDoService.loadToDoEntries()
            .pipe(
              tap(response => console.log(response)),
              map(response => new LoadToDoEntriesSuccess(response.body)),
              catchError(error => of(new LoadToDoEntriesError(error))
              ))
          ));

      constructor(private actions$: Actions, private toDoService: ToDoService) { }

Как мне проверить это, используя jasmine-marbles?

В настоящее время у меня есть это:

describe('ToDoEffects', () => {
  let actions$: Observable<any>;
  let effects: ToDoEffects;

  beforeEach(() => {
    TestBed.configureTestingModule({
      imports: [HttpClientModule],
      providers: [
        ToDoEffects,
        provideMockActions(() => actions$),
      ]
    });

    effects = TestBed.get(ToDoEffects);
    actions$ = TestBed.get(Actions);

  });

  describe('getToDoEntries$', () => {
    it('should load to-do entries', () => {

      const mockEntries = [{
        begin: new Date('01.04.2011'),
        end: new Date('01.05.2011'),
        content: 'Something',
        priority: PRIORITY.LOW
      }, {
        begin: new Date('01.04.2011'),
        end: new Date('01.05.2011'),
        content: 'SomethingElse',
        priority: PRIORITY.LOW
      }] as ToDoEntry[];

      const action = new LoadToDoEntries();
      const completion = new LoadToDoEntriesSuccess(mockEntries);

      actions$ = hot('-a', { a: action });
      const response = cold('-a|', { a: mockEntries });
      const expected = cold('--c|', { c: completion });
      const toDoServiceSpy = jasmine.createSpyObj('ToDoService', ['loadToDoEntries']);
      toDoServiceSpy.loadToDoEntries.and.returnValue(response);

      expect(effects.getToDoEntries$).toBeObservable(expected);

    });
  });
});

но - удивительно - это не получается.

Я скопировал эту более или менее форму здесь collection.effects.spec.ts , но пока не знаю, как работает jasmine-marbles, и яне уверен, правильно ли я издевался над службой (примечание: я не хочу использовать jest).

Я использую Angular 7.2.3, ngrx 7.2.0, Jasmine 3.3.0 и jasmine-marbles 0.4.1.

Может ли кто-нибудь просто помочь мне написать этот тест, чтобы начать?Тогда я бы взял это за основу.

...