kiểm thử đơn vị - Jasmine route spy - undefined không phải là một đối tượng (đang đánh giá 'navigate.calls.mostRecent().args')
Tôi đang cố gắng viết kiểm thử đơn vị cho một component Angular2 sử dụng định tuyến. Tôi có:
class MockRouter {
}
class MockAuth {
isLoggedIn(){
return false;
}
}
describe('Home', () => {
beforeEach(() => TestBed.configureTestingModule({
providers: [
BaseRequestOptions,
{ provide: Router, useClass: MockRouter },
HomeComponent,
{ provide: AuthenticationService, useClass: MockAuth }
]
}));
it('should navigate to login', inject([HomeComponent], (home: HomeComponent) => {
let navigate = jasmine.createSpy('navigate');
expect(navigate.calls.mostRecent().args[0]).toEqual(['/login']);
}));
});
nhưng tôi đang gặp lỗi:
TypeError: undefined không phải là một đối tượng (đang đánh giá 'navigate.calls.mostRecent().args') trong config/spec-bundle.js (dòng 41757)
Tôi nghĩ rằng jasmine spy là phương pháp đúng, nhưng tôi đã bỏ lỡ điều gì đó - Tôi đang làm gì sai?
Câu trả lời #1
Bạn nên thêm spy vào lớp MockRouter. Như vậy spy sẽ theo dõi các lần gọi navigate trong Router
class MockRouter {
navigate = jasmine.createSpy('navigate');
}
describe('Home', () => {
let mockRouter;
let fixture;
let component: HomeComponent;
beforeEach(() => {
mockRouter = new MockRouter();
TestBed.configureTestingModule({
declarations: [ HomeComponent ]
providers: [
BaseRequestOptions,
{ provide: Router, useValue: mockRouter },
{ provide: AuthenticationService, useClass: MockAuth }
]
});
fixture = TestBed.createComponent(HomeComponent);
component = fixture.createComponent;
});
it('should navigate to login', () => {
// calls component.ngOnInit
fixture.detectChanges();
// assuming some navigation has been done
expect(mockRouter.navigate).toHaveBeenCalledWith(['/login']);
});
});
Thông báo :
HomeComponentnằm trongdeclarations, không phải trongproviders- Chúng tôi giữ một tham chiếu đến mock trong bài kiểm tra, và sử dụng
useValuethay vìuseClasskhi chúng tôi cấu hình nó
