Cómo apagar / simular los submódulos de un requerimiento de nodejs usando sinon

Estoy usando sinon para la unidad de pruebas de una funcionalidad nodejs (Hapijs). Esta función está en index.js. Estoy incluir el index.js en mi archivo de prueba como

var index=require('./index.js'); 

Pero otra vez dentro del index.js hay requerimiento.

  var library= require('./library.js') 

Nuevamente, library.js tiene la funcionalidad de una tercera parte.

  var googlelib=require('googlelib') 

Ahora cuando ejecuto mi testfile testfunc.js a continuación

  var index= require('./index.js'); var assert = require('assert'); var sinon = require('sinon'); var proxyquire= require('proxyquire'); 

Me sale el error de abajo

  Error: Cannot find module './library' at Function.Module._resolveFilename (module.js:555:15) at Function.Module._load (module.js:482:25) at Module.require (module.js:604:17) at require (internal/module.js:11:18) 

Me gustaría saber si hay alguna forma de anular la biblioteca interna.js de index.js (ya que hay muchas necesidades dentro de index.js y muchas necesidades de)

Puede astackr un módulo requerido utilizando proxyquire , usándolo así.

 const proxyquire = require('proxyquire'); const stubs = { './library': (some, argument) => { assert.equal(some, 'thing'); return 'Some ' + argument; }, }; const index = proxyquire('./index', stubs); index(); 

Esto ejecutará los ./library función stubs['./library'] siempre que se ./library en index.js .

Si library.js exporta un objeto con funciones, simplemente haga que los stubs reflejen eso, y asegúrese de llamarlos como se llaman en index.js y library.js .

 const stubs = { './library': { more: (argument) => {}, methods: (argument) => {}, }, }; 

Lea los documentos para más información. Use esto junto con un marco de prueba como Mocha o Jasmine .

Además, el error que recibe no parece provenir de su archivo de prueba, sino de su archivo de índice. Esto responde a su pregunta, pero es posible que desee ver qué está causando su error o, más bien, por qué index.js no puede encontrar library.js . Asegúrate de que estén en la misma carpeta.