3
내가 구성 요소를 테스트하고 말 호출되지 : 가져 오기 및 내보내기 파일 uploadService가) (컴포넌트 메소드 importRules에 의해 내부적으로 호출되는 방법에 sendfile을 가지고 uploadService.ts각도 2 - 단위 테스트 스파이는
라는 서비스를 사용한다.
uploadService.ts
@Injectable()
export class UploadService {
constructor(private http: Http, private sharedData: SharedDataService) { }
sendFile(file: File, groupName?: string): Observable<Response> {
…
return this.http.post(url, data, options);
}
}
exportImport.components.ts
ImportRules() {
this.uploadService.sendFile(fileObj, fileName) {
…
}
}
대응 spec 파일 exportImport.components.spec.ts
class MockUploadService extends UploadService {
constructor() {
super(null, null);
}
sendFile(file: File, groupName?: string): Observable<Response> {
let resObject = new Response(null);
resObject.status = 200;
return Observable.of(resObject);
}
}
[ 'file.json', '테스트']으로 호출 된 것으로 스파이 sendfile을 예상 :
그리고는 beforeEach에서 나는 모의 서비스
it('should import ioc rules',
async(() => {
TestBed
.compileComponents()
.then(() => {
let fixture = TestBed.createComponent(TestComponent);
// let http = new ConnectionBackend();
let exportImportInstance = fixture.debugElement.children[0].componentInstance;
let mockReq: MockUploadService = new MockUploadService();
exportImportInstance.setGroupName('test');
exportImportInstance.setChosenFile('file.json');
spyOn(mockReq, 'sendFile');
exportImportInstance.importRules();
expect(mockReq.sendFile).toHaveBeenCalledWith('file.json', 'test');
});
}));
로하지만 오류가 무엇입니까 테스트를 실행에 실제 서비스를 대체했다 그러나 결코 부름을받지 않았습니다. 나는 내가 여기서 잘못하고있는 것을 얻지 못하고있다. 다음과 같은 방법으로
구성 요소입니다. 왜 그랬을까요? 구성 요소에 주입 된 실제 서비스에 대한 참조를 얻고 해당 인스턴스를 간첩해야합니다. –
@JBNizet, 나는 다른 방식으로 그것을 할 수 있습니다. I는 .overrideComponent 사용한 (ExportImportRulesComponent { 세트 { 제공자 : {제공 UploadService, useClass : MockUploadService를} ] }}); beforeEach 메서드에서. 이렇게하면 서비스를 조롱 할 수 있습니다. 그것이 좋은 방법인지 아닌지 확실하지 않습니다. – nikhil