更好的方式来dynamic改变testing的代码覆盖需要声明?

我有一个node.js库,我已经设置了与摩卡柴的 BDD。 我还添加了伊斯坦布尔的代码覆盖率。 一切都通过咕噜任务运行。

我挣扎了一会儿,终于在基于这个存储库上的设置之后,终于find了工作: https : //github.com/morkai/h5.buffers 。 它的工作,但我不喜欢的实施。

grunt-istanbul插件处理文件,设置一个环境variables,testing使用环境variables来查找仪表testing的位置。 这是我不喜欢的最后一部分。

//Gruntfile.js // ... env: { "default": { LIB_FOR_TESTS_DIR: srcLibForTestsDir }, coverage: { LIB_FOR_TESTS_DIR: lcovLibForTestsDir } } // ... 

然后在testing文件中,代码是:

 var FooClient = require((process.env.LIB_FOR_TESTS_DIR || '../lib') + '/foo-client.js'); 

在运行testing文件之前,我还在testing中使用了一个帮助程序来进行初始化。 所以我有两个想法。

  1. 使用testing助手提取文件并隐藏其中的详细信息:

     var foo = require('./test-helper.js').foo; var FooClient = foo.FooClient; var ThatOtherThing = foo.ThatOtherThing; 
  2. 使用testing跑步者? 我已经看到了这个参考,但我还没有find关于它和最佳做法的很多信息。

有没有更好的办法?

PS如果有人对这个问题有一个更好的标题的build议,我打开想法。

PPS请不要告诉我在你的答案切换到毯子 。 我评估了两者,并决定在伊斯坦布尔,因为它提供了更多的代码覆盖见解(例如,分支)。 如果毯子的伊斯坦布尔分支已经完成,那么我会考虑切换。

我基本上做了你以上的事情,但抽象它到一个单独的函数,以便我的要求在我的testing可能会更清洁/更具可读性。

 module.exports = function(path){ return require((process.env.LIB_FOR_TESTS_DIR || '../lib/') + path) } 

这并不理想,因为这意味着你需要在你的testing中需要一个额外的文件,但是它对我来说已经足够好了。 我的用法最终看起来有点像这样:

 var appRequire = require('./require_helper'), model = appRequire('models/model') 

我很好奇,看看别人提出了什么。