开玩笑:如何模拟嵌套的自定义节点模块?

时间:2019-12-12 12:21:59

标签: node.js mocking jestjs

我在使用自定义节点模块时遇到以下情况,而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包含两个模块作为依赖项。

0 个答案:

没有答案