ReferenceError: Невозможно получить доступ к Service 'до инициализации - PullRequest
1 голос
/ 09 января 2020

Я получаю сообщение об ошибке, когда я запускаю модульный тест с жасмином в приложении angular8. У меня есть служба, и внутри этой службы я внедряю другую службу

@Injectable({
  providedIn: 'root'
})

export class FirstService {
  constructor(private http: HttpClient, private configService: ConfigurationService) { }

, когда я npm запускаю тест, я всегда получаю сообщение об ошибке:

После всех возникла ошибка ReferenceError: Невозможно получить доступ к 'ConfigurationService' до инициализации в Module.ConfigurationService (http://localhost: 9876 / _karma_webpack_ / main. js: 1095: 112 )

Любая помощь?

1 Ответ

1 голос
/ 09 января 2020

Вам необходимо указать макет ConfigService, потому что это зависимость FirstService. Самый простой способ сделать это с помощью шпиона.

Что-то вроде:

let firstService: FirstServicec;
let configServiceSpy: jasmine.SpyObj<ConfigService>;

beforeEach(() => {
  const spy = jasmine.createSpyObj('ConfigService', ['getValue']);

  TestBed.configureTestingModule({
    providers: [
      FirstService,
      { provide: ConfigService, useValue: spy }
    ]
  });
  // Inject both the service-to-test and its (spy) dependency
  configService = TestBed.get(ConfigService);
  configServiceSpy = TestBed.get(ValueService);
});

Затем вы можете использовать шпиона в тесте как:

it('#getValue should return stubbed value from a spy', () => {
  const stubValue = 'stub value';
  configServiceSpy.getValue.and.returnValue(stubValue);

  expect(firstService.getValue())
    .toBe(stubValue, 'service returned stub value');
  expect(configServiceSpy.getValue.calls.count())
    .toBe(1, 'spy method was called once');
  expect(configServiceSpy.getValue.calls.mostRecent().returnValue)
    .toBe(stubValue);
});

Для получения дополнительной информации, ознакомьтесь с этим разделом Angular Документы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...