StaticInjectorError Spec Угловой тест - PullRequest
0 голосов
/ 28 марта 2019

Обычно я получаю следующую ошибку, если я не включил в свой 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;
  }
}
...