喷油器测试服务

时间:2019-10-17 10:49:21

标签: angular unit-testing dependency-injection

我有一个在依赖之前被引导的服务,因此,我准备使用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 个答案:

答案 0 :(得分:1)

使用fakeAsync解决。由于服务使用setInterval,因此最终可以在不同的实例中进行解析。

现在服务分配看起来像这样

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

此外,我已经编写了一个测试以确保实例相同

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