2015-12-24 13 views
5

Oto mój kanciasty fabryka napisany na maszynie:Jasmine Oczekiwany Spy aby zostały nazwane

export class DataService { 

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

Oto mój plik testowy.

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

Kiedy uruchomić plik test uszkodzoną mówiąc, że

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

nie jestem w stanie zrozumieć, co jest nie tak. Czy ktoś może mi powiedzieć, co jest nie tak z testem?

Odpowiedz

0

Naprawiono problem związany z aktualizacją testu.

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

Problem polega na tym, że zbyt późno zakładasz szpiega. Do czasu zamontowania szpiega w serwisie, został on już skonstruowany i został wywołany setYear. Ale najwyraźniej nie możesz zamontować szpiega w serwisie, zanim zostanie on zbudowany. Jednym ze sposobów obejścia tego problemu jest szpiegowanie DataService.prototype.setYear. Możesz upewnić się, że został wywołany przez instancję usługi, potwierdzając, że obiekt Dataservice.prototype.setYear.calls.mostRecent(). Jest usługą.