Pouvez-vous vérifier le test ci-dessous et voir pourquoi l'espion n'est jamais appelé? Le code fonctionne bien, mais le test ne joue pas.Pourquoi le Spy n'est pas appelé dans le Mock (Angular 4)
Si je spyOn
quelque chose à l'intérieur du this.apiSrv.fetch
passe alors le test bien. Très étrange!
merci d'avance.
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 );
}
}
Et le résultat: