Javascript 如何得到茉莉花';什么是间谍财产?

Javascript 如何得到茉莉花';什么是间谍财产?,javascript,angular,unit-testing,jasmine,karma-jasmine,Javascript,Angular,Unit Testing,Jasmine,Karma Jasmine,我看到了这篇文章,很高兴尝试一下,但我无法让它工作。试图保持简单只是为了找出问题所在,但即使这样也失败了 export class SomeService { ... private _myValue: Boolean = false; get myValue(): Boolean { return this._myValue; } set myValue(helper: Boolean) { this._myValue = helper; } 在我的单元测试中,我有: it

我看到了这篇文章,很高兴尝试一下,但我无法让它工作。试图保持简单只是为了找出问题所在,但即使这样也失败了

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
,而不是像我以前那样的
getter
例如:

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

我很早就试过了,但当时不起作用。我不确定是什么改变了。我还将@types/jasmine以及我的开发库中的其他所有内容更新为@latest,但是我没有在之后重新启动IDE,因为我认为这无关紧要。我只能猜测这就是为什么它现在起作用的原因

我仍在努力使
设置
正常工作

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

这实际上是我链接的帖子。这在Phantomjs中对我不起作用。它到处都能用吗