У меня есть угловой authenticated
охранник
@Injectable({
providedIn: 'root'
})
export class AuthenticatedGuard implements CanActivate, CanActivateChild {
constructor(@Inject('Window') private window: Window,
private readonly authenticationService: AuthenticationService) {}
canActivate(): boolean {
if (!this.authenticationService.isAuthenticated) {
this.window.location.href = '/login';
}
return allowed;
}
canActivateChild(): boolean {
return this.canActivate();
}
}
И у меня есть эти тесты с фиктивным окном, которое я делаю инъекцией, чтобы мое тестовое окно не перенаправляло, и поэтому я могу проверить, неhref
установлено
const MockWindow = {
location: {
_href: '',
set href(url: string) {
//console.log('set!', url)
this._href = url;
},
get href(): string {
//console.log('get!', this._href)
return this._href;
}
}
};
describe('Guard: authenticated', () => {
let redirectSpy: jasmine.Spy;
beforeEach(() => {
TestBed.configureTestingModule({
providers: [
AuthenticatedGuard,
AuthenticationService,
{provide: 'Window', useValue: MockWindow}
]
});
redirectSpy = spyOnProperty(MockWindow.location, 'href', 'set');
});
afterEach(() => {
sessionStorage.removeItem('token');
});
it('should allow route activation when both the token is set', inject([AuthenticatedGuard], (guard: AuthenticatedGuard) => {
sessionStorage.setItem('token', 'foo');
expect(guard.canActivate()).toEqual(true);
expect(guard.canActivateChild()).toEqual(true);
expect(redirectSpy).not.toHaveBeenCalled();
}));
it('should disallow route activation when the token is not set', inject([AuthenticatedGuard], (guard: AuthenticatedGuard) => {
expect(guard.canActivate()).toEqual(false);
expect(guard.canActivateChild()).toEqual(false);
expect(redirectSpy).toHaveBeenCalledWith('/login'); //<-- this fails!
}));
...
expect(redirectSpy).toHaveBeenCalledWith('/login');
всегда терпит неудачу, говоря, что он никогда не вызывался вообще.То же самое с expect(redirectSpy).toHaveBeenCalled();
- Что я здесь не так делаю?Я хочу иметь возможность проверить это перенаправление, но я не хочу, чтобы мой браузер тестирования кармы фактически перенаправлял.
(К вашему сведению: мне нужно использовать window.location.href
вместо углового маршрутизатора, чтобы мы могли направлять пользователейв другое неугловое приложение, которое обрабатывает логин)