检查一个函数是否在Jasmine测试中调用另一个函数

时间:2018-04-05 15:31:15

标签: javascript unit-testing jasmine karma-jasmine

考虑我正在通过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帖子,但它在这里没有用。

1 个答案:

答案 0 :(得分:3)

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