我正在尝试使用RxJs Observables在Angular中进行一个非常简单的测试,但是我无法成功。基本上我要测试的内容如下:
// We're inside some Angular component here...
let testMe = 0;
function somethingOrOther(): void {
this.someService.methodReturningObservable()
.subscribe(
(nextValue: number): void => {
testMe += nextValue;
}
)
}
当methodReturningObservable
发出值时,我如何测试testMe
是否正确更新?
我尝试了以下方法:
it(`works 'cuz I want it to`, fakeAsync(() => {
spyOn(this.someService, 'methodReturningObservable').and.returnValue(cold('a', {a: 10}));
tick();
expect(component.testMe).toBe(10);
}));
所以,tick()
在这里似乎没有任何作用。我的 cold
值从未在我的 spy 上发出过信号。
我尝试使用如下链接https://netbasal.com/testing-observables-in-angular-a2dbbfaf5329的marbles部分所示的getTestScheduler.flush()
。
我能否像这样使用 marbles 来发出 Observable 的值?在 AngularJS 中非常容易,只需触发 digest,但是我似乎无法让 Anguar 在 Observable 的下一个回调函数中让我进入。
fakeAsync
和tick
与testScheduler.flush()
之间感到困惑,并尝试了多种组合。结果发现我还有另一个愚蠢的问题,就是在服务调用之前退出了方法,因为其他变量的原因。所以我的刷新尝试失败了,因为我实际上从未进行过调用。这是一个漫长的一周...谢谢你确认我可以在这种情况下使用marbles,这正是我希望的! - Spencercold('--a- b--c')
,我如何在每次发射后停止并检查状态? - Spencer