NGXS: Тестирование отправленного действия не работает с ofActionDispatched - PullRequest
0 голосов
/ 27 ноября 2018

Я пытаюсь протестировать диспетчеризацию действий, но она не работает в моих тестах ... Компонент работает нормально, действие отправляется, но действия $ .pipe не перехватывает действие, поэтому не может бытьпроверено в тесте.

Код:

describe('ResponsiveService', () => {
  let store, actions$;
  const observableMediaMock = {
    subscribe : (callback: (change: MediaChange) => void) => { 
      this.callback = callback 
    },
    triggerMediaChange: (change: MediaChange) => this.callback(change)
  };
  beforeEach(() => {
    TestBed.configureTestingModule({
        imports: [
            FlexLayoutModule,
            NgxsModule.forRoot([MediaState])
        ],
        providers: [ResponsiveService, { provide: ObservableMedia, useValue: observableMediaMock }]
    });
    store = TestBed.get(Store);
    actions$ = TestBed.get(Actions);
  });

  it('should be created', inject([ResponsiveService], (service: ResponsiveService) => {
    expect(service).toBeTruthy();
  }));

  it("should send get request", function(done) {
    inject([ResponsiveService], (service: ResponsiveService) => {
      const mediaQueryValue = 'mediaQuery',
            mqAliasValue = 'mqAlias',
            suffixValue = 'suffix';

      actions$.pipe(ofActionDispatched([MediaChanged]))
      .subscribe(({payload}) => {
        expect(payload).toBeTruthy();
        expect(payload.mediaQuery).toEqual(mediaQueryValue);
        done();
      });
      service.init();

      observableMediaMock.triggerMediaChange(new MediaChange(null, mediaQueryValue, mqAliasValue, suffixValue));
    })(); // function returned by 'inject' has to be invoked
  });
});

Спасибо!

1 Ответ

0 голосов
/ 30 ноября 2018

Обновите тест до следующего:

it("should send get request", async( () => {
  inject([ResponsiveService], (service: ResponsiveService) => {
  const mediaQueryValue = 'mediaQuery',
        mqAliasValue = 'mqAlias',
        suffixValue = 'suffix';

  actions$.pipe(ofActionDispatched(MediaChanged))
  .subscribe(({payload}) => {
    expect(payload).toBeTruthy();
    expect(payload.mediaQuery).toEqual(mediaQueryValue);
  });
  service.init();

  observableMediaMock.triggerMediaChange(new MediaChange(null, mediaQueryValue, mqAliasValue, suffixValue));
  })(); // function returned by 'inject' has to be invoked
}));

ofActionDispatched не принимает список в качестве входных данных, но rater принимает список элементов, например: ofActionDispatched(MediaChanged, SomeOtherAction).

Вы также должны иметь возможность удалить готовую функцию и просто обернуть тест в обычный блок async.Надеюсь, это поможет, не уверен, правильно ли я открыл и закрыл все скобки.

...