我有一个node.js库,我使用mocha和chai为BDD设置了这个库。我还添加了istanbul的代码覆盖率。一切都通过grunt任务运行。
我挣扎了一段时间,在我将设置基于此存储库后,我终于开始工作了:https://github.com/morkai/h5.buffers。它有效,但我不喜欢实现。
grunt-istanbul插件检测文件,设置环境变量,测试使用环境变量来查找检测测试的位置。这是我不喜欢的最后一部分。
//Gruntfile.js
// ...
env: {
"default": {
LIB_FOR_TESTS_DIR: srcLibForTestsDir
},
coverage: {
LIB_FOR_TESTS_DIR: lcovLibForTestsDir
}
}
// ...
然后在测试文件中,代码是:
var FooClient = require((process.env.LIB_FOR_TESTS_DIR || '../lib') + '/foo-client.js');
我还在测试中使用帮助程序,以便在运行测试文件之前进行任何初始化。所以我有两个想法;
使用测试助手拉入文件并隐藏其中的详细信息:
var foo = require('./test-helper.js').foo;
var FooClient = foo.FooClient;
var ThatOtherThing = foo.ThatOtherThing;
使用测试跑步者?我已经看到了对此的引用,但我没有找到关于它和最佳实践的更多信息。
有更好的方法吗?
P.S。如果有人建议为这个问题提供更好的头衔,我愿意接受他们的想法。
P.P.S。请不要告诉我在你的答案中切换到毯子。我评估了两者并决定使用istanbul,因为它提供了更多的代码覆盖率(例如,分支)。如果毯子的伊斯坦布尔分支已经完成,那么我会考虑转换。
答案 0 :(得分:1)
我基本上完成了你上面的工作,但是把它抽象成一个单独的函数,这样我在测试中的要求可能会更清晰/更易读。
module.exports = function(path){
return require((process.env.LIB_FOR_TESTS_DIR || '../lib/') + path)
}
这并不理想,因为这意味着您需要在测试中需要额外的文件,但它对我来说已经足够好了。我的用法最终看起来像这样:
var appRequire = require('./require_helper'),
model = appRequire('models/model')
我很想知道其他人想出了什么。