javascript - 如何让 Jasmine 的 spyOnProperty 工作?

标签 javascript angular unit-testing jasmine karma-jasmine

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

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 is not defined on the spyOnProperty line。我不确定这是否有帮助,但我在上面提出的错误是我运行这些测试时 karma 报应给我的。

任何让这个工作的人,我都非常感谢帮助。为任何打字错误道歉,我一天中的大部分时间都在盯着这个看。

最佳答案

好吧,我花了很多时间在这上面,然后我愿意承认,但答案最终是一个简单的语法错误:

用作第 3 个参数的正确值是 get,而不是像我以前那样的 getter 例如:

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

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

关于javascript - 如何让 Jasmine 的 spyOnProperty 工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43928209/

相关文章:

javascript - 当浏览器窗口完全加载时,使用 fadeOut() 或 hide() 淡出/隐藏 Bootstrap 4 spinner/loader

javascript - 通过 jquery 仅插入 </div>

javascript - Angular 2 从外部数据引导应用程序

Objective-C:用于测试目的的 NSInputStream 和 NSOutputStream

javascript - 根据值改变颜色

javascript - Jquery - 删除选择项(循环数组)

angular - 构建 Angular 库时包含 Assets

html - Angular/HTML5 到 iOS WKWebView 通信

c# - 具有参数化单元测试的 .NET 测试框架,每个组合都显示红色/绿色?

c# - 最小起订量:抛出传递给方法的异常