我正在使用 Angular/Jasmine/Karma 测试一个在 ngOnInit 中运行的函数,该函数将在 15 分钟不活动后注销用户。
原代码如下:
#setSessionTimeout() {
const clicks$ = fromEvent(document, 'click');
const checkInterval = 60000; // 1 minute
const timeLimit = 15; // 15 minutes
clicks$.pipe(
startWith('fake click'),
switchMap(() =>
interval(checkInterval).pipe(
tap(value => {
console.log(value);
if (value > timeLimit) {
this.router.navigate(['logout']);
}
})
)
)
).subscribe()
}
这是我的测试:
fit('should log out a user after 15 minutes of inactivity', fakeAsync(() => {
tick(1000 * 60 * 60 * 60);
fixture.detectChanges();
expect(routerMock.navigate).toHaveBeenCalledWith(['logout']);
}));
我无法通过测试。看起来该函数没有在测试中运行,因为我没有看到 console.log 输出。如何正确测试这个功能?
只是一个疯狂的猜测,但您是否触发了组件的点击
fit('should log out a user after 15 minutes of inactivity', fakeAsync(() => {
document.dispatchEvent(new MouseEvent('click'));
fixture.detectChanges();
tick(1000 * 60 * 60 * 16);
fixture.detectChanges();
expect(routerMock.navigate).toHaveBeenCalledWith(['logout']);
}));