【问题标题】:Proxyquire calling original file instead of stubProxyquire 调用原始文件而不是存根
【发布时间】:2017-01-16 06:09:47
【问题描述】:

您好,我正在尝试使用 proxyquire 在我的控制器中模拟模型。但是由于某种原因,当尝试注入模拟时,会调用原始文件。

这就是控制器内部需要我的模型的方式:

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

我的问题是,如果理论上不会调用原始 products.model.js 模块,为什么我会得到这个。

【问题讨论】:

    标签: node.js mocha.js proxyquire


    【解决方案1】:

    proxyquire 不会存根未列出的模块,它们将像往常一样被需要,所以 看起来您在 product.controller 中有更多依赖项,而且它们都是正常需要的。

    除了为 proxyquire 提供完整的存根之外,我找不到很好的解决方案。

    【讨论】:

    • 为 proxyquire 提供完整存根除外 |你能详细说明一下吗?
    猜你喜欢
    • 2013-08-03
    • 2017-01-27
    • 2016-11-14
    • 2018-05-05
    • 2015-07-08
    • 2017-12-23
    • 2019-08-18
    • 1970-01-01
    相关资源
    最近更新 更多