У меня есть этот класс компонента страницы, который просто вызывает службу под нагрузкой, которая заполняет массив внутри этой службы. Какой лучший способ проверить функциональность подписки и отписки для этого компонента?
export class HomeComponent implements OnInit, OnDestroy {
private destroySubject$: Subject<void> = new Subject();
constructor(private accountsService: AccountsService) {}
ngOnInit(): void {
this.accountsService.getLoginAndAccountsList$()
.pipe(takeUntil(this.destroySubject$))
.subscribe(() => { /* do nothing */ }, (error: Error) => {
console.error('Unable to get the list of accounts!', error);
});
}
ngOnDestroy(): void {
this.destroySubject$.next();
}
}
Мои тесты прямо сейчас:
describe('Page Component: Home', () => {
let component: HomeComponent;
let fixture: ComponentFixture<HomeComponent>;
let debugEl: DebugElement;
let accountsService: AccountsService;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [ HttpClientTestingModule,],
providers: [ AccountsService ],
declarations: [ HomeComponent]
}).compileComponents();
accountsService = TestBed.get(AccountsService);
}));
beforeEach(() => {
fixture = TestBed.createComponent(HomeComponent);
component = fixture.componentInstance;
debugEl = fixture.debugElement;
});
it('should call the accountService to fetch the logins & accounts upon page load', async(() => {
spyOn(accountsService, 'getLoginAndAccountsList$');
fixture.detectChanges();
expect(accountsService.getLoginAndAccountsList$).toHaveBeenCalled();
}));
it('should kill the accountService subscription upon page destruction', async(() => {
spyOn(accountsService, 'getLoginAndAccountsList$');
fixture.detectChanges();
component.ngOnDestroy();
expect(????).toHaveBeenCalled();
}));
...
Первый тест работает прямо сейчас, но второй - нет, так как я не уверен, что мне нужно там тестировать. как я могу проверить, что подписка больше не активна, когда вызывается ngOnDestroy
?