gpt4 book ai didi

javascript - 动态更改测试代码覆盖率的 require 语句的更好方法?

转载 作者:太空宇宙 更新时间:2023-11-04 01:08:40 24 4
gpt4 key购买 nike

我有一个 node.js 库,我已使用 mocha 为 BDD 设置了该库。和 chai 。我还使用 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');

我还在测试中使用了一个帮助程序来执行运行测试文件之前所需的任何初始化。所以我有两个想法;

  1. 使用测试助手拉入文件并隐藏其中的详细信息:

    var foo = require('./test-helper.js').foo;
    var FooClient = foo.FooClient;
    var ThatOtherThing = foo.ThatOtherThing;
  2. 使用测试运行程序?我已经看到对此的引用,但我没有找到太多有关它和最佳实践的信息。

有更好的方法吗?

附注如果有人对这个问题有更好的标题建议,我愿意接受想法。

P.P.S。请不要告诉我在您的回答中切换到毯子。我对两者进行了评估并决定选择 Istanbul 尔,因为它提供了更多代码覆盖率见解(例如分支)。如果毯子的 Istanbul 尔分支完成了,那么我会考虑切换。

最佳答案

我基本上做了上面所做的事情,但将其抽象为一个单独的函数,以便我在测试中的要求可以更清晰/更具可读性。

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

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

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

我很想知道其他人的想法。

关于javascript - 动态更改测试代码覆盖率的 require 语句的更好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20252875/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com