Góc 9
Sử dụng jasmine.createSpyObj
là lý tưởng khi kiểm tra một thành phần trong đó một dịch vụ đơn giản được đưa vào. Ví dụ: giả sử, trong HomeComponent của tôi, tôi có HomeService (được tiêm vào). Phương thức duy nhất trong HomeService là getAddress (). Khi tạo bộ thử nghiệm HomeComponent, tôi có thể khởi tạo thành phần và dịch vụ dưới dạng:
describe('Home Component', () => {
let component: HomeComponent;
let fixture: ComponentFixture<HomeComponent>;
let element: DebugElement;
let homeServiceSpy: any;
let homeService: any;
beforeEach(async(() => {
homeServiceSpy = jasmine.createSpyObj('HomeService', ['getAddress']);
TestBed.configureTestingModule({
declarations: [HomeComponent],
providers: [{ provide: HomeService, useValue: homeServiceSpy }]
})
.compileComponents()
.then(() => {
fixture = TestBed.createComponent(HomeComponent);
component = fixture.componentInstance;
element = fixture.debugElement;
homeService = TestBed.get(HomeService);
fixture.detectChanges();
});
}));
it('should be created', () => {
expect(component).toBeTruthy();
});
it("should display home address", () => {
homeService.getAddress.and.returnValue(of('1221 Hub Street'));
fixture.detectChanges();
const address = element.queryAll(By.css(".address"));
expect(address[0].nativeNode.innerText).toEqual('1221 Hub Street');
});
});
Đây là một cách đơn giản để kiểm tra thành phần của bạn bằng cách sử dụng jasmine.createSpyObj
. Tuy nhiên, nếu dịch vụ của bạn có nhiều phương thức logic phức tạp hơn, tôi khuyên bạn nên tạo một mockService thay vì createSpyObj. Ví dụ:
providers: [{ provide: HomeService, useValue: MockHomeService }]
Hi vọng điêu nay co ich!
andCallThrough
. Nó không được ghi lại rõ ràng: /