开玩笑-测试一个函数是否调用了另一个函数

时间:2019-01-21 08:53:49

标签: typescript jestjs

我有一个包含一些静态函数的类。我们将该类称为allFunctions。 allFunctions.makeChanges(a,b,c)调用allFunctions.callUpdate()。

这些函数均未返回任何值。他们两个都简单地修改了一些参数并调用了提供它们的函数。

export class allFunctions {

    public static makeChanges(a, b, c) {
        ...
        this.callUpdate(c, d);
    }

    public static callUpdate(c, d) {
        otherFunctions.makeUpdate();
    }

}

如果要同时调用callUpdate()函数,我想测试何时调用makeChanges()函数。

我尝试过这样的事情:

import { allFunctions } from '../allFunctions';

describe('simple test', () => {

    it('makeChanges() should call callUpdate()', () => {

        const a = 1, b = 2, ...;

        allFunctions.callUpdate = jest.fn();

        const result = allFunctions.makeChanges(a,b,c);

        expect(allFunctions.callUpdate).toBeCalled();

    });

});

遗憾的是,这不起作用。是否可以测试一个功能是否调用了另一个功能?如果是这样,最好的方法是什么?

2 个答案:

答案 0 :(得分:0)

除在类中使用公共词外,所有代码似乎都可以找到。删除它们。

export class allFunctions {

    static makeChanges(a, b, c) {
        ...
        this.callUpdate(c, d);
    }

    static callUpdate(c, d) {
        otherFunctions.makeUpdate();
    }

}

答案 1 :(得分:0)

我终于找到了解决方案。我需要使用间谍代替jest.fn();

解决方案如下:

import { allFunctions } from '../allFunctions';

describe('simple test', () => {

    it('makeChanges() should call callUpdate()', () => {

        const a = 1, b = 2, ...;

        const spy = jest.spyOn(allFunctions, 'callUpdate');

        allFunctions.makeChanges(a,b,c);

        expect(spy).toHaveBeenCalled();

    });

});