【问题标题】:Check if a function called another function in Jasmine test在 Jasmine 测试中检查一个函数是否调用了另一个函数
【发布时间】:2018-09-15 12:06:16
【问题描述】:

考虑一下我通过 Karma 运行的以下 Jasmine 代码:

class Person {
    constructor(firstName, lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }
    getName() { this.getFullName() }
    getFullName() { this.firstName + this.lastName }
}

describe('Test Person', () => {

    beforeEach(() => {
        const programmer = new Person('John', 'Gray');
        spyOn(programmer, 'getFullName');
        programmer.getName();
    });

    it('getName should call getFullName', () => {
        expect(programmer.getFullName).toHaveBeenCalled();
    })
});

我想检查programmer.getName 确实调用了programmer.getFullName。我知道这可以通过检查getName 的返回值在此处进行测试,但我想明确检查是否调用了getFullName,因为这是我正在使用的实际代码中的场景。我已经实现了如上所示的代码,但它不起作用。我哪里错了?

我检查了this 的帖子,但它在这里不起作用。

【问题讨论】:

    标签: javascript unit-testing jasmine karma-jasmine


    【解决方案1】:

    将programmer 变量移到describe 块的上方。另外,我建议将getName() 称为测试iteslf。这应该有效:

    let programmer;
    beforeEach(() => {
        programmer = new Person('John', 'Gray');
        spyOn(programmer, 'getFullName');
    });
    
    it('getName should call getFullName', () => {
        programmer.getName();
        expect(programmer.getFullName).toHaveBeenCalled();
    })
    

    【讨论】:

    • 我试过了,但它不起作用。错误显示“预期间谍 getFullName 已被调用”。
    • 这实际上是由于异步代码,所以我的规范是在异步代码完成之前执行的。否则我的原始代码是正确的 :) 但是感谢您的回答!
    猜你喜欢
    • 2017-05-13
    • 1970-01-01
    • 1970-01-01
    • 2013-11-04
    • 2017-12-27
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    • 2016-05-08
    相关资源
    最近更新 更多