【问题标题】:Testing services with Injector使用 Injector 进行测试服务
【发布时间】:2019-10-17 10:49:21
【问题描述】:

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

由于某种原因,它变成了相同的两个不同实例。

如何使 成为一个实例?

【问题讨论】:

  • TestBed.get(MyClass).myService 未定义?
  • 不,它是 MyService 的一个实例

标签: angular unit-testing dependency-injection


【解决方案1】:

已通过使用fakeAsync 解决。由于服务使用setInterval,它最终会在不同的实例中解析。

现在服务分配如下所示

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

另外我写了一个测试来确保相同的实例

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-22
    • 1970-01-01
    • 2018-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-16
    相关资源
    最近更新 更多