簡體   English   中英

如何讓Jasmine的spyOnProperty工作?

[英]How to get Jasmine's spyOnProperty to work?

我看到這篇帖子后很興奮地嘗試了,但我無法讓它發揮作用。 試圖保持這個簡單只是為了弄清楚什么是錯的,但即使這樣也是失敗的。

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

在我的單元測試中,我有:

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

我把值放在最上面以清楚地顯示我可以得到並設置值。 這沒有問題。 Wallaby顯示ReferenceError:未在spyOnProperty行上定義spyOnProperty。 我不確定這是否有幫助,但我上面提到的錯誤是當我運行這些測試時業力給我的。

任何人都有這個工作,我非常感謝你的幫助。 對於任何錯別字道歉,我一直在大部分時間都在盯着這個。

好吧,我花了更多的時間在這上面然后我願意承認,但答案最終是一個簡單的語法錯誤:

用作第三個參數的正確值是get ,而不是像以前那樣get getter 例如:

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

我早期嘗試過,但當時沒有工作。 我不確定是什么改變了。 我還將@ types / jasmine以及我的開發庫中的其他內容更新為@latest,但之后我沒有重新啟動IDE,因為我認為這不重要。 我只能猜測這就是它現在有效的原因。

我還在努力讓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();
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM