我试图监视另一个函数调用的函数,这两个函数都驻留在外部文件中并已导入。

Funcs.spec.js:

import * as Funcs from './Funcs'
describe('funcA', () => {
    it('calls funcB', () => {
        jest.spyOn(Funcs, 'funcB')
        Funcs.funcA()
        expect(Funcs.funcB).toHaveBeenCalled()
    }
}


Funcs.js:

export const funcA = () => {
    funcB()
}
export const funcB = () => {}


由于某些原因,在Funcs.js的范围内间谍不受尊重。我该怎么做才能窥探funcB,所以我知道funcA已经将其称为?

最佳答案

只能侦查方法。如果直接在同一模块中像funcB那样调用funcB(),则无法监视。

为了监视或模拟导出的功能,funcAfuncB应该驻留在不同的模块中。

这允许监视已编译ES模块中的funcB(模块对象在本机ESM中为只读):

import { funcB } from './b';

export const funcA = () => {
    funcB()
}


由于模块导入是模块的表示形式,因此可以转换为:

var _b = require('./b');

var funcA = exports.funcA = function funcA() {
    (0, _b.funcB)();
};


funcB方法与_b模块对象相关联,因此可以对其进行监视。

09-16 13:05