如何为mocha指定测试目录?

时间:2012-05-25 11:02:10

标签: unit-testing node.js mocha

Mocha默认尝试在test下查找测试文件,如何指定其他目录,例如server-test

14 个答案:

答案 0 :(得分:256)

使用此:

mocha server-test

或者,如果您有子目录,请使用:

mocha "server-test/**/*.js"

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

答案 1 :(得分:124)

如果您仍想在命令行上运行mocha,但想要在./server-tests而不是./test的文件夹中运行测试,请在{{}创建一个文件{1}}只在文件中显示:

./test/mocha.opts

如果您想要运行该文件夹和子目录中的所有内容,请将其放入server-tests

test/mocha.opts

server-tests --recursive 是通过命令行传入的参数,因此第一行只是您要更改测试的目录也将从mocha.opts重定向

答案 2 :(得分:78)

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

/test
/test/server-test
/test/other-test

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

mocha $(find test -name '*.js')

答案 3 :(得分:28)

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

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

mocha --reporter spec server-test/*.js

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

mocha --reporter spec --grep "Fnord:" server-test/*.js

答案 4 :(得分:19)

这样做的好方法是在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"
  },

然后只运行冒烟测试呼叫:

npm test

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

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

"scripts": {
    "test": "mocha test/**/*.js"
    "smoketest": "mocha smoketest/**/*.js"
  },

然后只运行冒烟测试呼叫:

npm smoketest

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

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

  "scripts": {
    "test": "mocha **/*.spec.js"
  },

然后运行所有测试调用:

npm test

在这里查看模式?好。 :)一致性失败mura

答案 5 :(得分:18)

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

find ./parent_test_directory -name '*test.js' | xargs mocha -R spec

或使用--recursive开关

mocha --recursive test_directory/

答案 6 :(得分:13)

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

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

第2步:在Mocha配置文件中代码下面的添加

'use strict';

module.exports = {
  spec: 'src/app/**/*.test.js'
};

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

答案 7 :(得分:10)

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

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

我在/test/unit/下的所有目录中运行了所有测试,而忽略了/test/中的其他目录

答案 8 :(得分:3)

我在Windows 7上使用node.js v0.10.0和mocha v1.8.2和npm v1.2.14。 我只是想让mocha使用路径测试/单元来查找我的测试, 花了很长时间并尝试了几件我降落的东西,

使用“test / unit / * .js”选项不适用于Windows。 有充分理由说,windows shell不会像unixen那样扩展通配符。

然而,使用“test / unit”确实有效,没有文件模式。 例如。 “mocha test / unit”运行test / unit文件夹中的所有文件。

这只会将一个文件夹文件作为测试运行,但您可以将多个目录名称作为参数传递。

另外,要运行单个测试文件,您可以指定完整路径和文件名。 例如。 “mocha test / unit / mytest1.js”

我实际上在package.json中设置了npm     “脚本”:{         “测试”:“摩卡测试/单位”     },

所以'npm test'运行我的单元测试。

答案 9 :(得分:3)

如果您使用nodejs,请package.json下的scripts

  1. 对于global (-g)安装:"test": "mocha server-test""test": "mocha server-test/**/*.js"用于子文档
  2. 对于project安装:"test": "node_modules/mocha/bin/mocha server-test""test": "node_modules/mocha/bin/mocha server-test/**/*.js"用于子文档
  3. 然后只需将您的测试正常运行为npm test

答案 10 :(得分:3)

正如@superjos在评论中提到的那样使用

mocha --recursive "some_dir"

答案 11 :(得分:2)

对于更改测试目录,这似乎不是任何“简单”的支持 但是,相对于你的问题,也许你应该看一下this issue

答案 12 :(得分:2)

正如@ jeff-dickey建议的那样,在项目的根目录中,创建一个名为test的文件夹。在该文件夹中,创建一个名为mocha.opts的文件。现在,我尝试改进Jeff的答案,对我有用的不是指定一个测试文件夹的名称,而是通过添加以下行来指定一个模式来查找要在我的项目中运行的所有测试:

*/tests/*.js --recursive

中的

mocha.opts

如果您想要指定要查找测试的确切文件夹,我做了类似的事情:

shared/tests/*.js --recursive
server/tests/graph/*.js --recursive

我希望这可以帮助任何需要比其他答案更多的人

答案 13 :(得分:2)

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

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

{
  "spec": "path/to/test/files"
}

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

{
  ...

  "mocha": {
    "spec": "path/to/test/files"
  }
}

更多选项为here