2016-09-08 4 views
3

Hallo Ich versuche, ein Modell in meinem Controller mit Proxyquire zu verspotten. Aber aus irgendeinem Grund wird beim Versuch, einen Mock zu injizieren, die ursprüngliche Datei aufgerufen.Proxyquire Aufruf der ursprünglichen Datei anstelle von Stub

Dies ist, wie mein Modell in der Steuerung erforderlich wird:

var Product = require('./product.model'); 

Und das ist, wie ich, versuchen, das Modell

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}); 

aber wenn ich meine Tests Stummel laufe ich Dieser Fehler

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 

Meine Frage ist, warum ich das bekomme, wenn in der Theorie das original products.model.js Modul wird nicht angerufen werden.

Antwort

1

proxyquire nicht stub nicht aufgeführten Module und sie werden wie üblich erforderlich sein, so es sieht aus wie Sie mehr Abhängigkeiten in product.controller haben und sie alle normalerweise benötigt werden.

Ich kann keine schöne Lösung für dieses Problem finden, außer die Bereitstellung von vollständigen Stub für Proxyquire.

Verwandte Themen