使用 fromEvent 流对 NgRx 效果进行单元测试

Unit Test NgRx effect with fromEvent stream

如何对监听 window 事件的 NgRx Effect 进行单元测试?

我知道如何使用操作流设置单元测试,因为这有详细记录,但我找不到用事件侦听器测试它的示例。

下面是我要单元测试的效果:

openKeyboard$ = createEffect(() => {
  return fromEvent(window, 'ionKeyboardDidShow').pipe(mapTo(KeyboardActions.keyboardOpened()));
});

单元测试描述看起来像这样:

describe('openKeyboard$', () => {
  it('dispatches keyboardOpened action on ionKeyboardDidShow window event', () => {
    // how to test this?
  });
});

感谢您的帮助。

我找到了一个解决方案,只需发送 window 事件即可,但我不确定这是否是一个优雅的解决方案

describe('openKeyboard$', () => {
  it('dispatches keyboardOpened action on ionKeyboardDidShow window event', (done) => {
    effects.openKeyboard$.subscribe((res) => {
      expect(res).toEqual(KeyboardActions.keyboardOpened());
      done();
    });

    const eventMock = new Event('ionKeyboardDidShow');
    window.dispatchEvent(eventMock);
  });
});