Обычно я получаю следующую ошибку, если я не включил в свой Testbed зависимость, которая требуется для конструктора класса, который я тестирую.Но в этом случае отсутствующей зависимостью является класс, который я тестирую.
Ошибка
Error: StaticInjectorError[AuthGuardService]:
NullInjectorError: No provider for AuthGuardService!
Вопрос:
Что мне нужно добавить, чтобы получитьтест пройден?
Спецификация AuthGuardService
import {TestBed} from '@angular/core/testing';
import {AuthGuardService} from './auth-guard.service';
import {UserService} from '../user/user.service';
import {Router} from '@angular/router';
import {RouterTestingModule} from '@angular/router/testing';
describe('AuthGuardService', () => {
beforeEach(() => {
const userServiceSpy = jasmine.createSpyObj('UserService', ['isAuthenticated']);
const routerServiceSpy = jasmine.createSpyObj('RouterService', ['navigate']);
TestBed.configureTestingModule({
imports: [
RouterTestingModule
],
providers: [
{provide: UserService, useValue: userServiceSpy},
{provide: Router, useValue: routerServiceSpy}
]
});
});
it('should be created', () => {
const service: AuthGuardService = TestBed.get(AuthGuardService);
expect(service).toBeTruthy();
});
});
AuthGuardService
import {Injectable} from '@angular/core';
import {Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot} from '@angular/router';
import {UserService} from '../user/user.service';
@Injectable()
export class AuthGuardService implements CanActivate {
constructor(private userService: UserService, private router: Router) {
}
async canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
const authStatus = await this.userService.isAuthenticated();
if (authStatus === true) {
return true;
}
this.router.navigate(['front'], {queryParams: {returnUrl: state.url}});
return false;
}
}