Услуги тестирования с инжектором - PullRequest
1 голос
/ 17 октября 2019

У меня есть служба, которая загружается до ее зависимости, и поэтому я использую Injector для достижения зависимости, когда она будет готова.

constructor(private readonly injector: Injector) {
  const interval = setInterval(() => {
    const myService = injector.get(MyService);

    if (myService) {
      this.myService = myService;
      clearInterval(interval);
    }
  }, 200);
}

В моем тесте у меня есть

beforeEach(() => {
  return TestBed.configureTestingModule({
    providers: [
       {
          provide: MyClass,
          useClass: MyClass,
          deps: [
            Injector,
          ]
       },
       {
         provide: MyService,
         useValue: myServiceMock
       },
     ]
  });
});

Проблема в том, что TestBed.get(MyService) !== TestBed.get(MyClass).myService.

По какой-то причине это стало двумя разными экземплярами одного и того же.

Как сделать так, чтобы это был один экземпляр?

1 Ответ

1 голос
/ 17 октября 2019

Решено с помощью fakeAsync. Поскольку служба использует setInterval, она в конечном итоге разрешается в разных экземплярах.

Теперь назначение службы выглядит следующим образом

beforeEach(fakeAsync(() => {
  myClass = TestBed.get(MyClass);
  tick(200);
  myService = TestBed.get(MyService);
}));

Кроме того, я написал тест для проверки того же экземпляра

expect(myService).toBe((myClass as any).myService)
...