如何为mocha指定测试目录?

Fre*_*ind 206 unit-testing mocha.js node.js

Mochatest默认尝试查找测试文件,如何指定另一个目录,例如server-test

Beh*_*ang 269

用这个:

mocha server-test
Run Code Online (Sandbox Code Playgroud)

或者,如果您有子目录,请使用以下命令:

mocha "server-test/**/*.js"
Run Code Online (Sandbox Code Playgroud)

注意使用双引号.如果省略它们,则可能无法在子目录中运行测试.

  • 双引号问题让我多年了!谢谢你拯救我的理智.向所有阅读此内容的人大声喊出要特别注意这些双引号. (21认同)
  • 在我的情况下,我使用`mocha ./**/*.test.js`(所以我可以将测试文件与模块文件共存).该模式停止工作对我来说,当我加在比测试的其他文件层次不同级别的测试文件,并只发现一个怪球文件,而不是打别人,在层级住在同一水平上.用引号括起来修复它. (10认同)
  • 这应该是答案!双引号拯救了我 (4认同)
  • 这对我不起作用。如果我想这样做,我必须做“mocha test/server-test” (2认同)

Jef*_*key 136

如果你想继续只是mocha在命令行上运行,但想在一个文件夹中运行测试,./server-tests而不是在文件中./test创建一个./test/mocha.opts文件:

server-tests
Run Code Online (Sandbox Code Playgroud)

如果要运行该文件夹和子目录中的所有内容,请将其放入 test/mocha.opts

server-tests
--recursive
Run Code Online (Sandbox Code Playgroud)

mocha.opts 是通过命令行传入的参数,因此使第一行只是您想要更改测试的目录也将重定向 ./test/

  • 这是摩擦力最小的选项,应该是接受的答案恕我直言 (11认同)
  • 那肯定是最好的答案。很可能值得在您的答案中添加`mocha.opts`文件可以放在您想要的任何位置,然后只需执行`mocha`即可指定其配置文件的路径,例如:`mocha-选择。/ mocha.opts` (2认同)
  • 您也可以将 --recursive 放在 mocha 命令行中,如果您在 package.json 中定义测试脚本,则很有用 (2认同)

250*_*50R 80

如果你的测试文件夹中有子文件夹,这是一种方法

/test
/test/server-test
/test/other-test
Run Code Online (Sandbox Code Playgroud)

然后在linux中你可以使用find命令递归列出所有*.js文件并将其传递给mocha:

mocha $(find test -name '*.js')
Run Code Online (Sandbox Code Playgroud)

  • 或者只是使用`--recursive`,我在下面解释 (27认同)
  • 换句话说,`mocha`没有选项在config中设置所需的目录结构? (5认同)

gre*_*zap 28

不要使用-g或--grep选项,该模式对it()内部的测试名称进行操作,而不是文件系统.目前的文件对此有误导和/或完全错误.要将整个命令限制为文件系统的一部分,可以将模式作为最后一个参数传递(它不是标志).

例如,此命令会将您的报告器设置为spec,但只会立即测试server-test目录中的js文件:

mocha --reporter spec server-test/*.js
Run Code Online (Sandbox Code Playgroud)

此命令将执行与上面相同的操作,此外它仅运行测试的it()字符串/定义以"Fnord:"开头的测试用例:

mocha --reporter spec --grep "Fnord:" server-test/*.js
Run Code Online (Sandbox Code Playgroud)


Mic*_*she 26

执行此操作的好方法是在package.json中添加一个"test"npm脚本,该脚本使用正确的参数调用mocha.这样你的package.json也会描述你的测试结构.它还避免了其他答案中的所有这些跨平台问题(双引号和单引号,"查找"等)

让mocha运行"test"目录中的所有js文件:

"scripts": {
    "start": "node ./bin/www", -- not required for tests, just here for context
    "test": "mocha test/**/*.js"
  },
Run Code Online (Sandbox Code Playgroud)

然后只运行冒烟测试调用:

npm test
Run Code Online (Sandbox Code Playgroud)

您可以通过这种方式标准化所有项目中所有测试的运行,因此当新开发人员启动您的项目或其他项目时,他们知道"npm test"将运行测试.这有很好的历史优先权(Maven,例如,大多数旧学校"制造"项目也是如此).当所有项目具有相同的测试命令时,它确实有助于CI.

同样,您可能有一些快速"冒烟"测试的子集,您可能希望mocha运行:

"scripts": {
    "test": "mocha test/**/*.js"
    "smoketest": "mocha smoketest/**/*.js"
  },
Run Code Online (Sandbox Code Playgroud)

然后只运行冒烟测试调用:

npm smoketest
Run Code Online (Sandbox Code Playgroud)

另一种常见模式是将测试放在与测试源相同的目录中,但调用测试文件*.spec.js.例如:src/foo/foo.js由src/foo/foo.spec.js测试.

按惯例运行名为*.spec.js的所有测试:

  "scripts": {
    "test": "mocha **/*.spec.js"
  },
Run Code Online (Sandbox Code Playgroud)

然后运行所有测试调用:

npm test
Run Code Online (Sandbox Code Playgroud)

看到这里的模式?好.:)一致性打败mura.

  • 为什么哦,为什么文档中没有这个清晰、简单的建议? (2认同)

Ant*_*ley 20

运行test_directory包含匹配的子目录中的所有文件test.js

find ./parent_test_directory -name '*test.js' | xargs mocha -R spec
Run Code Online (Sandbox Code Playgroud)

或使用--recursive开关

mocha --recursive test_directory/
Run Code Online (Sandbox Code Playgroud)


raj*_*008 19

现在几天(2020 年),您可以使用mocha 配置文件处理此问题:

步骤 1:在应用程序的根位置创建 .mocharc.js文件

第 2 步:在 mocha 配置文件中添加以下代码

'use strict';

module.exports = {
  spec: 'src/app/**/*.test.js'
};
Run Code Online (Sandbox Code Playgroud)

有关配置文件中的更多选项,请参阅此链接:https : //github.com/mochajs/mocha/blob/master/example/config/.mocharc.js


the*_*eld 12

如果在node.js中则从Mocha v6开始有一些新配置:

选项1:.mocharc.json在项目的根目录中创建:

{
  "spec": "path/to/test/files"
}
Run Code Online (Sandbox Code Playgroud)

选项2:mocha在项目的中添加属性package.json

{
  ...

  "mocha": {
    "spec": "path/to/test/files"
  }
}
Run Code Online (Sandbox Code Playgroud)

更多选项在这里


jfu*_*unk 10

我刚才遇到了这个问题并通过删除--recursive选项(我已设置)并使用上面建议的相同结构解决了这个问题:

mochify "test/unit/**/*.js"

这会在/test/unit/我所有目录中运行所有测试,同时忽略其中的其他目录/test/