[英]Is there way to spyOnProperty window.location.search using jasmine unit testing? because search is not configurable
[英]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.