检查在Jasmine测试中是否有一个名为另一个函数的函数

mav*_*ick 2 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();
    })
});
Run Code Online (Sandbox Code Playgroud)

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

我检查了这篇文章,但在这里不起作用。

小智 5

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();
})
Run Code Online (Sandbox Code Playgroud)

  • 我试过这个,但它不起作用。错误显示“预期的间谍 getFullName 已被调用”。 (2认同)