2015-05-05 7 views
7

Ich habe eine globale Funktion für erfordern bestimmte Dateien meiner app/Rahmen geschrieben:require.main.require funktioniert, aber nicht in Mocha Test

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

Dieses Modul ist in/components/coGlobalFunctions.

es in meinem Haupt-App erforderlich ist app.js wie folgt aus:

require('./components/coGlobalFunctions'); 

Dann in anderen Modulen "etwas" aus dem Rahmen, den ich verwende mit:

var baseScheme = coRequireModel('Base'); 

Das funktioniert aber nicht in die Mocha-Tests, die mir vor dem Request.main.require-Aufruf ein "Error: Can not find modul" geben.

Es scheint, dass der Test von einem anderen Quellordner kommt. Aber ich dachte, das Erfordernis von "require.main.require" würde den Aspekt der relativen Verknüpfung mit Modulen ausschließen.

EDIT:

Ein Beispiel Testdatei in api/Benutzer lebt:

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

eine Abhilfe für dieses gefunden? Vielleicht um das Modul in Tests zu setzen? – Chathushka

Antwort

4

require.main Punkte an das Modul, das direkt von dem Knoten ausgeführt wurde. Wenn Sie also node app.js ausführen, wird require.main auf app.js zeigen. Wenn Sie es hingegen mit mocha ausgeführt haben, zeigt require.main auf Mocha. Dies ist wahrscheinlich der Grund, warum Ihre Tests fehlschlagen.

Weitere Details finden Sie unter the node docs.

+0

Was ist die beste Praxis hier? – Jonah

5

Da in der Node-Webkit-App require.main nicht index.html war, wenn Mocha-Tests ausgeführt wurden, wurden Fehler links und rechts angezeigt, weil Module nicht aufgelöst werden konnten. Hacky fix in meinem Test-helper.js (erste, was in allen Tests erforderlich) regelte es:

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

Das fühlt sich falsch, obwohl es funktionierte. Gibt es einen besseren Weg, das zu beheben? Es ist so, als würden wir einige der oben genannten Lösungen mit # 7 kombinieren, um das Mokka-Testen zum Laufen zu bringen, aber das Modifizieren der Hauptanforderungen, nur um alles zum Laufen zu bringen, wenn das Testen sich wirklich falsch anfühlt.

Für andere abwehren-den - ".." - mess-Lösungen finden Sie hier: https://gist.github.com/branneman/8048520

Verwandte Themen