2015-05-05 9 views
7

ho scritto una funzione globale per richiedere alcuni file della mia app/quadro:opere require.main.require ma non all'interno Mocha prova

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

Questo modulo è in/componenti/coGlobalFunctions.

È richiesto nella mia app principale app.js come questo:

require('./components/coGlobalFunctions'); 

Poi in altri moduli con "qualcosa" dal quadro che uso:

var baseScheme = coRequireModel('Base'); 

Questo funziona, ma non in i test Mocha che mi danno un "Errore: impossibile trovare il modulo" subito prima della richiesta require.main.require.

Sembra che il test provenga da un'altra cartella di origine. Ma pensavo che il request.main.require avrebbe eliminato l'aspetto del dover collegare relativamente ai moduli.

EDIT:

Un file di prova esempio vivente di api/utente:

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

trovato una soluzione per questo? forse per impostare il modulo nei test? – Chathushka

risposta

4

require.main punti al modulo che è stato eseguito direttamente dal nodo. Quindi, se esegui node app.js, allora require.main punterà a app.js. Se, d'altra parte, lo hai eseguito utilizzando mocha, quindi require.main punterà a moka. Questo è probabilmente il motivo per cui i test non stanno funzionando.

Vedere the node docs di ulteriori dettagli.

+0

Qual è la migliore pratica qui? – Jonah

5

Perché require.main non era index.html nel mio nodo-webkit app quando l'esecuzione di test moka, gettò gli errori a destra e sinistra di non essere in grado di risolvere i moduli. fix Hacky nel mio test-helper.js (richiesto prima cosa in tutti i test) risolto:

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

Questo si sente male, anche se ha funzionato. C'è un modo migliore per risolvere questo problema? È come combinare alcune delle soluzioni di cui sopra con # 7 per ottenere il funzionamento dei test di moka, ma la modifica di main richiede solo che tutto funzioni quando i test sono veramente sbagliati.

Per gli altri-i Evita - ".." - soluzioni pasticcio, vedere qui: https://gist.github.com/branneman/8048520