require.main.require工作,但不在摩卡testing

我写了一个全局函数来要求我的应用程序/框架的某些文件:

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

这个模块在/ components / coGlobalFunctions中。

这是我的主要应用程序app.js需要这样的:

 require('./components/coGlobalFunctions'); 

然后在其他模块中使用框架中的“东西”,我使用:

 var baseScheme = coRequireModel('Base'); 

这工作,但不是在摩卡testing,给我一个“错误:无法find模块”在require.main.require调用之前。

看来testing来自另一个源文件夹。 但是我认为require.main.require会把相对连接模块的方面拿掉。

编辑:

生活在api / user中的示例testing文件:

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

因为在运行mochatesting时,require.main并不是我的node-webkit应用程序中的index.html,所以它会左右错误地解决模块问题。 在我的testinghelper.js(所有testing中要求第一件事)修复它的Hacky修复:

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

这感觉错了,虽然它的工作。 有没有更好的方法来解决这个问题? 就像把#7的上述解决scheme与上面的解决scheme结合起来,让摩卡testing工作起来,但是修改main的要求只是为了在testing时感觉真的错了。

对于其他避免 – “..” – 混乱的解决scheme,请参阅: https : //gist.github.com/branneman/8048520

require.main指向从节点直接运行的模块。 所以,如果你运行node app.js ,那么require.main将指向require.main 另一方面,如果你使用mocha运行它,那么require.main将指向摩卡。 这可能就是为什么你的testing失败了。

查看更多细节的节点文档 。