我有一个在依赖之前被引导的服务,因此,我准备使用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
。
由于某种原因,它变成了同一实例的两个不同实例。
如何使它成为一个实例?
答案 0 :(得分:1)
使用fakeAsync
解决。由于服务使用setInterval
,因此最终可以在不同的实例中进行解析。
现在服务分配看起来像这样
beforeEach(fakeAsync(() => {
myClass = TestBed.get(MyClass);
tick(200);
myService = TestBed.get(MyService);
}));
此外,我已经编写了一个测试以确保实例相同
expect(myService).toBe((myClass as any).myService)