1
以下のテストを確認して、スパイが決して呼び出されない理由を確認できますか?実際のコードは正常に動作しますが、テストは実行されません。モックでスパイが呼び出されない理由(角4)
の中の何かがspyOn
の場合、テストに合格します。非常に奇妙な!
ありがとうございます。
manager.service.spec.ts
describe('ManagerService',() => {
const mockClass = new MockClass();
let spy;
beforeEach(() => {
TestBed.configureTestingModule({
providers: [
ManagerService,
{ provide: ApiService, useValue: mockClass},
]
});
spy = spyOn(mockClass, 'fetch');
});
fit('should call server', inject([ManagerService], (service: ManagerService) => {
service.callServer();
expect(spy).toHaveBeenCalled();
}));
});
manager.service.ts
@Injectable()
export class ManagerService {
constructor(
private apiSrv: ApiService,
) {}
public callServer() {
this.apiSrv.fetch('http://url.com').subscribe((data) => {
console.log(data);
});
}
}
api.service.ts
export class ApiService {
constructor(private http: Http) {}
fetch(resource: string) {
return this.http.get(resource).map((response) => response.json());
}
}
mock.ts
export class MockClass {
public fetch(): Observable<any> {
const expectedResult = {
items: {
data: [],
}
};
return Observable.of(expectedResult );
}
}
そして結果:
あなたはMockClass.fetch
medhodが実際にあなたが.subscribe
方法でそれをチェーンので、それ以外の場合はエラーが発生しますし、テストができなくなります(ないだけでスタブ)と呼ばれていることを確認する必要があり