web-dev-qa-db-ja.com

ジャスミンはスパイが呼ばれることを期待していました

これが私のangular TypeScriptで書かれたファクトリーです:

export class DataService { 

constructor () {
   this.setYear(2015);
 }
setYear = (year:number) => {
        this._selectedYear =year;
     }
}

これが私のテストファイルです。

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

ファイルを実行すると、テストが失敗し、

**Expected spy setSelectedCropYear to have been called.
Error: Expected spy setSelectedCropYear to have been called.**

何が悪いのか理解できません。誰かがテストの何が問題なのか教えてもらえますか?.

7
Aj1

問題は、スパイの設定が遅すぎることです。スパイをサービスにマウントするまでに、スパイはすでに構築されており、setYearが呼び出されています。しかし、明らかに、スパイを構築する前にサービスにマウントすることはできません。

これを回避する1つの方法は、DataService.prototype.setYearをスパイすることです。あなたはそれがそれを主張するサービスインスタンスによって呼び出されたことを確認することができます

Dataservice.prototype.setYear.calls.mostRecent().object is service.

7
Jorge

ここで修正された問題は、更新されたテストです。

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