【问题标题】:Karma: Running a single test file from command lineKarma:从命令行运行单个测试文件
【发布时间】:2015-05-22 22:41:38
【问题描述】:

所以,我一直在寻找这个,在这里找到“类似”的答案,但不是我想要的。

现在,如果我想用 karma 测试单个文件,我需要对有问题的文件执行 fit()、fdescribe()...

但是,我想要的是能够使用配置文件调用业力,并将其定向到特定文件,因此我根本不需要修改文件,即:

karma run --conf karma.conf.js --file /path/to/specific/test_file.js

可以这样做吗?或者有什么帮手? (使用 grunt 还是 gulp?)

【问题讨论】:

  • 试过karma run -- --grep=testDescriptionFilter?我以前看过这个建议,但我无法直接验证它是否有效。 (如果我在家,我会在建议之前尝试。因为我不能尝试 - 我正在评论而不是回答。):)
  • 这不只是针对特定的it 吗?不可能将它用于文件?
  • 说实话,如果我想专注于单个测试文件,我总是只修改 karma.conf。这很容易做到,我从来没有花精力去寻找更快的方法。
  • 热狗。很高兴它有帮助。发布。 :)

标签: javascript gruntjs gulp karma-runner karma-jasmine


【解决方案1】:

即使 --files 不再受支持,您也可以使用环境变量来提供文件列表:

// karma.conf.js
function getSpecs(specList) {
  if (specList) {
    return specList.split(',')
  } else {
    return ['**/*_spec.js'] // whatever your default glob is
  }
}

module.exports = function(config) {
  config.set({
    //...
    files: ['app.js'].concat(getSpecs(process.env.KARMA_SPECS))
  });
});

然后在 CLI 中:

$ env KARMA_SPECS="spec1.js,spec2.js" karma start karma.conf.js --single-run

【讨论】:

  • 这最终效果很好!只需确保您的默认 glob 在其前面有一个目录名称,否则您会收到模式错误。此外,我更改了我的文件:定义如下:文件:[].concat(getSpecs(process.env.KARMA_SPECS)),最终效果更好,因为如果没有环境变量,该函数已经将 glob 模式放入其中放。哦,我认为您不需要命令前面的“env”(没有它对我有用)。感谢@Yuriy Kharchenko 的解决方案!
【解决方案2】:

最近版本的 karma 不再支持此选项:

见https://github.com/karma-runner/karma/issues/1731#issuecomment-174227054

文件数组可以使用 CLI 重新定义:

karma start --files=Array("test/Spec/services/myServiceSpec.js")

或转义:

karma start --files=Array\(\"test/Spec/services/myServiceSpec.js\"\)

参考文献

【讨论】:

  • 给了我这个错误 - bash: syntax error near unexpected token `('
  • 所以,当我尝试这个时,我收到以下错误:config.files = config.files.map(createPatternObject).map(createPatternMapper(basePathResolve)),这可能是因为我使用的是 requireJS?
  • erm,不是因为 requireJS,出于某种奇怪的原因,karma 没有将 Array("zzz") 读取为 JS Array? O_o
  • nm,看来 karma 不再支持 --files arg 了?
  • 警告所有来到这里的人,业力不再支持此选项:github.com/karma-runner/karma/issues/…
【解决方案3】:

首先你需要启动业力服务器

karma start

然后,您可以使用 grep 过滤特定的测试或描述块:

karma run -- --grep=testDescriptionFilter

【讨论】:

  • 这个答案应该说你应该在运行karma run之前让karma与karma start一起运行
  • 我真的不认为这是必要的,因为问题询问如何使用karma run 进行过滤。似乎很清楚,发布者知道如何启动 Karma 并运行所有测试,并且只是在寻找有关过滤的语法。
  • 如果我希望以编程方式发生这种情况该怎么办? IE。我不知道更改文件的描述,但我会知道它的文件名。
  • 这个解决方案似乎根本不适用于 Jasmine 测试 (karma-jasmine)。并且 karma run --help 根本不显示 --grep 作为命令选项。我正在使用最新的 Karma(它说 1.5.0)。
  • 这不会运行一个测试!
猜你喜欢
  • 2014-03-20
  • 2013-04-05
  • 2014-12-20
  • 2011-03-18
  • 1970-01-01
  • 2020-10-06
  • 2011-04-09
  • 2016-10-06
相关资源
最近更新 更多