Angular: 如何在测试中强制 EventEmitter 刷新

Angular: how to force EventEmitter to flush in test

我有以下 Angular 测试:

it('should pass', fakeAsync(() => {
      let a;
      const eventEmitter1 = of('A');
      eventEmitter1.subscribe(v => a = v);

      let b;
      const eventEmitter2 = new EventEmitter();
      eventEmitter2.emit('B');
      eventEmitter2.subscribe(v => b = v);

      tick();
      flush();

      console.log(a); // Outputs A
      console.log(b); // outputs undefined

      expect(a).toBe('A');
      expect(b).toBe('B'); // How to make the test to pass here?
    }));

我无法刷新 eventEmitter2 并且测试 失败 。如何在测试中刷新 EventEmmiter.emit()

注意:这是我测试的简化版本,它使用来自 Angular 的 async 管道,内部使用 EventEmitter

"@angular/core": "^8.2.14"

eventEmitter2.emit('B'); 放在 eventEmitter2.subscribe(v => b = v);

之后
eventEmitter2.subscribe(v => b = v);
eventEmitter2.emit('B');

因为 EventEmitterSubject 的扩展。它不会向新订阅者发布以前的活动。