我试图监视另一个函数调用的函数,这两个函数都驻留在外部文件中并已导入。
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()
,则无法监视。
为了监视或模拟导出的功能,funcA
和funcB
应该驻留在不同的模块中。
这允许监视已编译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
模块对象相关联,因此可以对其进行监视。