Gặp phải vấn đề tương tự khi tạo các bộ thử nghiệm cho một đường dẫn định tuyến như:
{
path: 'edit/:property/:someId',
component: YourComponent,
resolve: {
yourResolvedValue: YourResolver
}
}
Trong thành phần, tôi đã khởi tạo thuộc tính được truyền là:
ngOnInit(): void {
this.property = this.activatedRoute.snapshot.params.property;
...
}
Khi chạy các bài kiểm tra, nếu bạn không chuyển một giá trị thuộc tính trong "useValue" của ActivateRoute, thì bạn sẽ không được xác định khi phát hiện các thay đổi bằng cách sử dụng "fixture.detectChanges ()". Điều này là do các giá trị giả cho ActiisedRoute không chứa thuộc tính params.property. Sau đó, useValue giả bắt buộc phải có các tham số đó để cố định khởi tạo 'this.property' trong thành phần. Bạn có thể thêm nó dưới dạng:
let fixture: ComponentFixture<YourComponent>;
let component: YourComponent;
let activatedRoute: ActivatedRoute;
beforeEach(done => {
TestBed.configureTestingModule({
declarations: [YourComponent],
imports: [ YourImportedModules ],
providers: [
YourRequiredServices,
{
provide: ActivatedRoute,
useValue: {
snapshot: {
params: {
property: 'yourProperty',
someId: someId
},
data: {
yourResolvedValue: { data: mockResolvedData() }
}
}
}
}
]
})
.compileComponents()
.then(() => {
fixture = TestBed.createComponent(YourComponent);
component = fixture.debugElement.componentInstance;
activatedRoute = TestBed.get(ActivatedRoute);
fixture.detectChanges();
done();
});
});
Bạn có thể bắt đầu thử nghiệm, chẳng hạn như:
it('should ensure property param is yourProperty', async () => {
expect(activatedRoute.snapshot.params.property).toEqual('yourProperty');
....
});
Bây giờ, giả sử bạn muốn kiểm tra một giá trị thuộc tính khác, sau đó bạn có thể cập nhật ActivateRoute giả của mình dưới dạng:
it('should ensure property param is newProperty', async () => {
activatedRoute.snapshot.params.property = 'newProperty';
fixture = TestBed.createComponent(YourComponent);
component = fixture.debugElement.componentInstance;
activatedRoute = TestBed.get(ActivatedRoute);
fixture.detectChanges();
expect(activatedRoute.snapshot.params.property).toEqual('newProperty');
});
Hi vọng điêu nay co ich!