У меня есть следующий класс:
@Injectable()
export class MyService {
private subscriptions: { [key: string]: Subscription } = {};
constructor(private otherService: OtherService) {
}
public launchTimer(order: any): void {
this.subscriptions[order.id] = timer(500, 300000).subscribe(
() => {
this.otherService.notify();
},
);
}
}
Я хотел бы написать модульный тест, который утверждает, что при вызове launchTimer () , notify вызывается метод OtherService . Хитрость заключается в том, что подписка на наблюдаемый timer осуществляется непосредственно в методе, что означает, что я не могу сделать подписку непосредственно в модульном тесте, чтобы выполнить утверждение. До сих пор я придумал следующий тест, который не прошел, потому что утверждение сделано до подписки:
class OtherServiceMock {
public notify(): void {}
}
describe('MyService', () => {
let otherService: OtherServiceMock;
let myService: MyService;
beforeEach(() => {
TestBed.configureTestingModule({
providers: [
{ provide: OtherService, useClass: OtherServiceMock },
],
});
otherService = TestBed.get(OtherService);
myService = TestBed.get(MyService);
});
it('launchTimer should call notify', () => {
spyOn(otherService, 'notify');
myService.launchTimer();
expect(otherService.notify).toHaveBeenCalled();
});
});
Я попытался обернуть функцию с помощью asyn c и я также использовал fakeAsyn c с галочкой , но, похоже, ничего не работает. Любые идеи, как я могу ждать подписку, прежде чем сделать утверждение?