嗨,我试图模拟我的控制器内使用代理的模型。但是由于某些原因,当尝试注入模拟时,会调用原始文件。
这就是我的模型是如何在控制器中被要求的:
var Product = require('./product.model');
这就是我如何,试图存根模型
var proxyquire = require('proxyquire').noCallThru().noPreserveCache();
var productsStub = {findAsync: sinon.stub()};
productsStub.findAsync.resolves(mockProducts);
var mockProducts = [{_id:'0001',title: 'title', price: 123, description: 'le description'}];
var productController = proxyquire('./product.controller',{'./product.model':productsStub});
但是当我运行测试时,我得到这个错误
Running "mochaTest:unit" (mochaTest) task
>> Mocha exploded!
>> OverwriteModelError: Cannot overwrite `Product` model once compiled.
>> at Mongoose.model (/Users/victor/Documents/projects/estudo/mean/meanshop/node_modules/mongoose/lib/index.js:360:13)
>> at Object.<anonymous> (/Users/victor/Documents/projects/estudo/mean/meanshop/server/api/product/product.model.js:15:27)
>> at Module._compile (module.js:409:26)
>> at normalLoader (/Users/victor/Documents/projects/estudo/mean/meanshop/node_modules/babel-core/lib/api/register/node.js:199:5)
>> at Object.require.extensions.(anonymous function) [as .js] (/Users/victor/Documents/projects/estudo/mean/meanshop/node_modules/babel-core/lib/api/register/node.js:216:7)
>> at Module.load (module.js:343:32)
>> at Function.Module._load (module.js:300:12)
>> at Module.require (module.js:353:17)
>> at require (internal/module.js:12:17)
>> at Object.<anonymous> (/Users/victor/Documents/projects/estudo/mean/meanshop/server/api/product/product.model.spec.js:1:15)
>> at Module._compile (module.js:409:26)
>> at normalLoader (/Users/victor/Documents/projects/estudo/mean/meanshop/node_modules/babel-core/lib/api/register/node.js:199:5)
>> at Object.require.extensions.(anonymous function) [as .js] (/Users/victor/Documents/projects/estudo/mean/meanshop/node_modules/babel-core/lib/api/register/node.js:216:7)
>> at Module.load (module.js:343:32)
>> at Function.Module._load (module.js:300:12)
>> at Module.require (module.js:353:17)
>> at require (internal/module.js:12:17)
>> at /Users/victor/Documents/projects/estudo/mean/meanshop/node_modules/mocha/lib/mocha.js:220:27
>> at Array.forEach (native)
>> at Mocha.loadFiles (/Users/victor/Documents/projects/estudo/mean/meanshop/node_modules/mocha/lib/mocha.js:217:14)
>> at MochaWrapper.run (/Users/victor/Documents/projects/estudo/mean/meanshop/node_modules/grunt-mocha-test/tasks/lib/MochaWrapper.js:51:15)
>> at /Users/victor/Documents/projects/estudo/mean/meanshop/node_modules/grunt-mocha-test/tasks/mocha-test.js:86:20
我的问题是为什么我得到这个,如果在理论上,原来的产品。模型。js模块将不会被调用。
proxyquire不存根未列出的模块,他们将像往常一样需要,所以看起来你在product里面有更多的依赖关系。控制器和它们都是正常需要的。
除了为proxyquire提供完整的存根之外,我找不到很好的解决这个问题的方法,例如,为直接导入文件所需的所有文件添加存根。