Reputation: 7692
I have a service which is bootstrapped before its dependency and therefore I use Injector
to achieve my dependency when it's ready.
constructor(private readonly injector: Injector) {
const interval = setInterval(() => {
const myService = injector.get(MyService);
if (myService) {
this.myService = myService;
clearInterval(interval);
}
}, 200);
}
In my test I have
beforeEach(() => {
return TestBed.configureTestingModule({
providers: [
{
provide: MyClass,
useClass: MyClass,
deps: [
Injector,
]
},
{
provide: MyService,
useValue: myServiceMock
},
]
});
});
The problem is that TestBed.get(MyService) !== TestBed.get(MyClass).myService
.
By some reason it became two different instances of the same.
How do I make the to be one instance?
Upvotes: 1
Views: 28
Reputation: 7692
Solved by using fakeAsync
. Since a service uses setInterval
it eventually resolves in different instances.
Now service assignment looks like this
beforeEach(fakeAsync(() => {
myClass = TestBed.get(MyClass);
tick(200);
myService = TestBed.get(MyService);
}));
Additionally I've written a test to ensure same instance
expect(myService).toBe((myClass as any).myService)
Upvotes: 1