I have following Angular test:
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?
}));
I am not able to flush the eventEmitter2
and test fails. How can I flush the EventEmmiter.emit()
in a test?
Note: This is simplified version of my test that uses async
pipe from Angular that uses EventEmitter
internally.
"@angular/core": "^8.2.14"
Place eventEmitter2.emit('B');
after eventEmitter2.subscribe(v => b = v);
eventEmitter2.subscribe(v => b = v);
eventEmitter2.emit('B');
As EventEmitter
is an extension to the Subject
. It won't publish previous events to new subscribers.