Я пишу юнит-тест для приложения Angular. Я хочу проверить, переводит ли router.navigate меня в правильное местоположение или нет.
Когда API отвечает успешно, router.navigate переносит в другое местоположение. Но тест завершается неудачно: «Ожидаемая шпионская навигация была вызвана с [« account »], но никогда не вызывалась».
AccountsListComponent.ts
deleteRecord(id) {
this.http.delete('/api/accounts/' + id)
.subscribe(res => {
if (res['status'] == "FAILURE") {
console.log("failure");
} else {
console.log("API responded success"); //this is printed
this.router.navigate([ '/accounts' ]); // I want to test this
}
}, (err) => {
console.log(err);
}
);
}
component.spec.ts
routerStub = {
navigate: jasmine.createSpy('navigate'),
};
TestBed.configureTestingModule({
imports:[RouterTestingModule,FormsModule,ReactiveFormsModule,HttpClientTestingModule,RouterTestingModule.withRoutes([{ path: 'accountsList', component: AccountsListComponent}])],
declarations: [ AccountDetailComponent,AccountsListComponent ],
schemas:[CUSTOM_ELEMENTS_SCHEMA]
})
it ('should delete account, if account exist and take back to accountsList page', ()=> {
let spyOnDelete = spyOn (component,'deleteRecord').and.callThrough();
fixture.detectChanges();
component.record.AccountID = "account";
fixture.detectChanges();
let deleteButtonDOM = fixture.debugElement.query(By.css('#deletebtn'));
deleteButtonDOM.triggerEventHandler('click',null);
fixture.detectChanges();
expect(spyOnDelete).toHaveBeenCalled(); //passes
const req = _HttpTestingController.expectOne('/api/accounts/'+ component.record.AccountID);
expect(req.request.method).toBe("DELETE");
req.flush({status:"SUCCESS"});
expect(routerStub.navigate).toHaveBeenCalledWith('accounts');//fails???
})