2017-05-12 10 views
9

Widziałem post this post i byłem podekscytowany wypróbowaniem go, ale nie mogę go uruchomić. Stara się zachować to proste, tylko po to, aby dowiedzieć się, co jest nie tak, ale nawet to się nie udaje.Jak uruchomić spyOnProperty Jasmine?

export class SomeService { 
... 
private _myValue: Boolean = false; 
get myValue(): Boolean { 
    return this._myValue; 
} 
set myValue(helper: Boolean) { 
    this._myValue = helper; 
} 

I w moim badanej jednostki, mam:

it('should ', inject([SomeService], (someService: SomeService) => {   
    let oldValue = someService.myValue;  
    expect(oldValue).toBe(false); // passes, clearly we can use our getter 
    someService.myValue = true;  
    expect(someService.myValue).toBe(true); // passed, clearly the setter worked 

    spyOnProperty(someService, 'myValue', 'getter').and.returnValue(false); // Property myValue does not have access type getter 

    //spyOnProperty(someService, 'myValue', 'get').and.returnValue(false);same error if tried this way 

    expect(someService.myValue).toBe(false); 
})); 

kładę wartości aż wierzch się wyraźnie pokazują mogę uzyskać i ustawić wartość. To nie ma problemów. Wallaby pokazuje ReferenceError: spyOnProperty nie jest zdefiniowane w linii spyOnProperty. Nie jestem pewien, czy to pomaga, ale błędy, które stawiam powyżej, były tym, co daje mi karma, gdy przeprowadzam te testy.

Każdy, kto to zrobił, bardzo bym sobie z tego poradził. Przepraszam za wszelkie literówki, patrzyłem na to przez większość dnia.

+0

Może to pomoże: [podobny problem] (http://stackoverflow.com/questions/33148496/how-can-i-spy-on-a-getter-property-using-jasmine) –

+1

Że był właściwie postem, który łączyłem. – Angelo

Odpowiedz

8

Cóż, poświęciłem na to więcej czasu, ale muszę przyznać, ale odpowiedź okazała się prostym błędem składniowym. Chcesz użyć get, a nie getter. A więc:

spyOnProperty(someService, 'myValue', 'get').and.returnValue(false) 

Które wcześniej próbowałem, ale nie działałem w tym czasie. Nie jestem pewien, co się zmieniło. Zaktualizowałem także @ types/jaśmin, wraz ze wszystkim innym w mojej bibliotece dev, do @latest, ale później nie uruchomiłem ponownie IDE, ponieważ nie sądziłem, że to by miało znaczenie. Mogę się tylko domyślać, że właśnie dlatego działa teraz.

+0

To nie działa dla mnie w Phantomjs. czy działa wszędzie –

+0

To zadziałało dla mnie! Dzięki! – Stefdelec

3

Wciąż pracowałem nad tym, aby zadziałało set.

const foo = { 
    get value() {}, 
    set value(v) {} 
}; 

it('can spy on getters',() => { 
    spyOnProperty(foo, 'value', 'get').and.returnValue(1); 
    expect(foo.value).toBe(1); 
}); 

it('and on setters',() => { 
    const spiez = spyOnProperty(foo, 'value', 'set'); 
    foo.value = true; 
    expect(spiez).toHaveBeenCalled(); 
});