如何在另一个模块中模拟函数构造函数及其方法?
我有ModuleA
,它公开了公共方法publicMethodA
,并已导入到ModuleB
中。我想模拟何时参数value
大于0
且小于0
中的ModuleB
。
ModuleA:
//ModuleA
const ModuleA = () => {
const privateVariable = {
data: 'InitialValue'
};
const privateMethod = (value) => {
return privateVariable.data = value;
}
return{
publicMethodA(value){
if(value<0){
return privateVariable.data;
}
return privateMethod(value);
}
}
}
export default ModuleA;
ModuleB使用ModuleA:
import ModuleA from './ModuleA';
const moduleA = new ModuleA();
export function processData(value){
return moduleA.publicMethodA(value);
}
模块B的最佳测试:
//ModuleB.test.js
import { processData } from './ModuleB';
import ModuleA from './ModuleA';
jest.mock('./ModuleA', () => {
return jest.fn().mockImplementation(() => {
return {
publicMethodA: jest.fn()
};
});
});
describe('processData', () => {
test('should call publicMethodA from processData', () => {
processData(1);
expect(ModuleA.publicMethodA).toHaveBeenCalled();
})
});
错误:
jest.fn( ) value should be a mock
如果我不使用mockImplementation
,那么我将无法模拟函数构造函数,它将对此有所抱怨。