代码之家  ›  专栏  ›  技术社区  ›  darKnight

检查Jasmine测试中的函数是否调用了其他函数

  •  7
  • darKnight  · 技术社区  · 6 年前

    考虑一下我在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 post,但它在这里不起作用。

    1 回复  |  直到 6 年前
        1
  •  10
  •   DuÅ¡an Stanković    6 年前

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