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');
因为 EventEmitter
是 Subject
的扩展。它不会向新订阅者发布以前的活动。
我有以下 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');
因为 EventEmitter
是 Subject
的扩展。它不会向新订阅者发布以前的活动。