我在使用自定义节点模块时遇到以下情况,而Jest试图模拟其中一个。
// contract-manager (nodejs module with its own package.json file)
class Manager {
constructor(options){
//do some setup
}
dbInteractions(data, callaback){
//make some operations
}
}
module.exports = (options) => new Manager(options);
//check (nodejs module with its own package.json file)
const contractManagerBuilder = require('contract-manager');
const contractManager = contractManagerBuilder({//some options});
function doOperation() {
contractManager.doInteractions(data, (error) => {
//do stuff
});
}
//do some other stuff...
现在,我使用Jest面临的问题是我无法在正在测试的模块中模拟'contract-manager'模块。 在我的测试案例中,我有以下内容:
test('some test case', done =>{
jest.mock('contract-manager', () => {
return {
dbInteractions: (data, callaback) => {
//do some fake stuff
}
};
});
const checkModule = require('check');
//do some testing on checkModule
done();
});
我已经做了一些检查,并且在测试范围内,如果我需要('contract-manager'),那么当我使用'check'模块时,我会得到它的模拟版本,但它会得到原始的非模拟版本合同经理”。 项目结构如下:
project_root
|---lib
| |---contract-manager
| | |-contract-manager.js
| | |-contract-manager.spec.js
| | |-index.js
| | |-package.json
| |---rest
| |---check
| |-check.js
| |-check.spec.js
| |-index.js
| |-package.json
|---node_modules
|---package.json
|---index.js
根package.json包含两个模块作为依赖项。