对从不活动状态中注销用户的功能进行单元测试

问题描述 投票:0回答:1

我正在使用 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 输出。如何正确测试这个功能?

angular rxjs karma-jasmine
1个回答
0
投票

只是一个疯狂的猜测,但您是否触发了组件的点击

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']);                                                                  
}));
© www.soinside.com 2019 - 2024. All rights reserved.