【发布时间】:2019-09-08 06:05:17
【问题描述】:
我正在尝试对 BehaviorSubject 执行简单的单元测试。 它看起来像这样:
fit('pageChange', fakeAsync(() => {
spyOn(pagintationService, 'pageChange');
pagintationService.pageChange(3);
expect(pagintationService.pageChange).toHaveBeenCalledWith(3);
tick(100);
pagintationService.page$.subscribe(pageNum => {
console.log(pageNum)
})
}))
当我登录 susbscribe() 时,我希望这个值是 3。那是因为实现看起来像这样:
pageChange(page: number) {
this.paginationPageSource.next(page);
}
在哪里
firstPage = 0;
private paginationPageSource = new BehaviorSubject<number>(this.firstPage);
page$ = this.paginationPageSource.asObservable();
这是为什么呢?我也尝试过使用 flushMicrotasks() 但没有任何反应。
更新
fit('pageChange', fakeAsync(() => {
let pageNum = 3;
spyOn(pagintationService, 'pageChange').and.callThrough();
pagintationService.pageChange(pageNum);
pagintationService.page$.subscribe(num =>
expect(num).toBe(pageNum))
expect(pagintationService.pageChange).toHaveBeenCalledWith(3);
}))
【问题讨论】:
-
为什么是什么?有什么问题?你已经说出了你的期望。你还没有告诉你观察到的东西。
-
我想在 paginationPageSource.next(page); 时模拟动作将发出数字(此处为 3),然后检查 page$ 是否包含此值。
-
好的。但这并不能告诉我们问题是什么。但无论如何:你明白什么是间谍吗?当您拨打
spyOn(pagintationService, 'pageChange');时会发生什么?为什么要监视要测试的方法?
标签: angular unit-testing rxjs jasmine karma-jasmine