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);
        });
    });
}

Artikel terkait