angularjs - Jasmine Diharapkan Spy telah dipanggil
Berikut adalah pabrik angular saya yang ditulis dalam typescript:
export class DataService {
constructor () {
this.setYear(2015);
}
setYear = (year:number) => {
this._selectedYear =year;
}
}
Ini adalah file uji saya.
import {DataService } from ' ./sharedData.Service';
export function main() {
describe("DataService", () => {
let service: DataService;
beforeEach(function () {
service = new DataService();
});
it("should initialize shared data service", () => {
spyOn(service, "setYear");
expect(service).toBeDefined();
expect(service.setYear).toHaveBeenCalled(2015);
});
});
}
Ketika saya menjalankan file itu, tes gagal dengan mengatakan bahwa
**Expected spy setSelectedCropYear to have been called.
Error: Expected spy setSelectedCropYear to have been called.**
Saya tidak bisa mengetahui apa yang salah. Bisa seseorang memberitahu saya apa yang salah dengan tes ini, tolong.
Jawaban #1
Masalahnya adalah Anda memasang mata-mata terlalu terlambat. Pada saat Anda memasang mata-mata pada layanan, layanan sudah dibangun dan setYear telah dipanggil. Tetapi jelas Anda tidak bisa memasang mata-mata pada layanan sebelum layanan itu dibangun.
Salah satu cara untuk mengatasi ini adalah dengan memata-matai DataService.prototype.setYear. Anda dapat memastikan itu dipanggil oleh instance layanan dengan menegaskan bahwa
Dataservice.prototype.setYear.calls.mostRecent().object is service.Jawaban #2
Memperbaiki masalah, berikut adalah Tes yang diperbarui.
import {DataService } from ' ./sharedData.Service';
export function main() {
describe("DataService", () => {
let service: DataService;
beforeEach(function () {
service = new DataService();
});
it("should initialize shared data service", () => {
var spy = spyOn(service, "setYear").and.callThrough();
expect(service).toBeDefined();
expect(spy);
expect(service._selectedYear).toEqual(2015);
});
});
}
