У меня проблема с моим тестом, и я не знаю, как ее решить:
У меня есть два метода в моем сервисе:
isAuthenticated () {
const token = localStorage.getItem('token');
if (token) {
return this.verifyToken(token).pipe(
map(data => true),
catchError (error => of(false))
);
}
return of(false);
}
verifyToken (token: string): Observable<any> {
const data = {'token': token};
return this.http.post(url/verify/, data);
}
И метод canActivate у меня на страже:
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
return this.auth.isAuthenticated().pipe(
map(data => {
if (data) {
this.router.navigate(['/url/']);
}
return !data;
})
);
}
Таким образом, если пользователь аутентифицирован, он не может нажать URL (страница входа).И мой тест выглядит так:
let guard: Guard;
let service: Service;
beforeEach(() => {
TestBed.configureTestingModule({
imports: [CommonModule],
providers: [
Service,
Guard,
]
}).compileComponents();
guard = TestBed.get(Guard);
service = TestBed.get(Service);
});
it('can't see login page when he is logged in', fakeAsync(() =>{
spyOn(service, 'isAuthenticated').and.callFake(()=>{return true;});
guard.canActivate(new ActivatedRouteSnapshot(), mockSnapshot).subscribe(
x => expect(x).toBeFalsy()
);
}));
Я получил
TypeError: this.auth.isAuthenticated(...).pipe is not a function
как мне правильно его проверить?