require.main.require funciona pero no dentro de la prueba Mocha

He escrito una función global para requerir ciertos archivos de mi aplicación / marco:

global.coRequireModel = function(name) { // CRASH happens here return require.main.require('./api/_co' + name + '/_co' + name + '.model'); } 

Este módulo se encuentra en / components / coGlobalFunctions.

Se requiere en mi aplicación principal app.js así:

 require('./components/coGlobalFunctions'); 

Luego en otros módulos usando “algo” del framework que uso:

 var baseScheme = coRequireModel('Base'); 

Esto funciona pero no en las pruebas de Mocha que me dan un “Error: No puedo encontrar el módulo” justo antes de la llamada require.main.require.

Parece que la prueba viene de otra carpeta de origen. Pero pensé que require.main.require eliminaría el aspecto de tener que enlazar relativamente con los módulos.

EDITAR:

Un archivo de prueba de ejemplo que vive en api / usuario:

 var should = require('should'); var app = require('../../app'); var User = require('./user.model'); ... 

require.main apunta al módulo que se ejecutó directamente desde el nodo. Por lo tanto, si ejecuta node app.js , require.main apuntará a app.js Si, por otro lado, lo ejecutó usando mocha , require.main apuntará a mocha. Esto es probable por qué tus pruebas están fallando.

Ver los documentos del nodo de más detalles.

Debido a que require.main no estaba index.html en mi aplicación node-webkit al ejecutar pruebas mocha, arrojó errores a la izquierda y la derecha acerca de no poder resolver módulos. Corrección de Hacky en mi prueba-helper.js (lo primero que se requiere en todas las pruebas) lo solucionó:

 var path = require('path') require.main.require = function (name) { // navigate to main directory var newPath = path.join(__dirname, '../', name) return require(newPath) } 

Esto se siente mal, aunque funcionó. ¿Hay una mejor manera de arreglar esto? Es como combinar algunas de las soluciones anteriores con el # 7 para que funcionen las pruebas de moca, pero la modificación de mains requiere solo hacer que todo funcione cuando las pruebas se sienten realmente mal.

Para otras soluciones para evitar el “-” – evitar, consulte aquí: https://gist.github.com/branneman/8048520