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.

1 ответ

Решение

proxyquire НЕ заглушает не перечисленные модули, и они потребуются как обычно, поэтому, похоже, у вас есть больше зависимостей внутри product.controller, и все они обычно требуются.

Я не могу найти хорошее решение для этой проблемы, кроме предоставления полной заглушки для прокси-сервера.

Другие вопросы по тегам