253

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

4

15 回答 15

315

用这个:

mocha server-test

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

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

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

于 2013-11-11T09:04:29.220 回答
153

编辑:此选项已弃用:https ://mochajs.org/#mochaopts


如果您想通过仍然mocha在命令行上运行来执行此操作,但想在文件夹中./server-tests而不是在文件夹中运行测试,请在文件中./test创建一个./test/mocha.opts文件:

server-tests

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

server-tests
--recursive

mocha.opts是通过命令行传入的参数,因此将第一行设为您要更改测试的目录也将从./test/

于 2014-08-06T01:36:01.523 回答
84

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

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

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

mocha $(find test -name '*.js')
于 2012-05-25T12:17:37.760 回答
46

这样做的好方法是在 package.json 中添加一个“测试”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

看到这里的模式了吗?好的。:) 一致性击败了村

于 2018-06-18T05:22:26.067 回答
29

不要使用 -g 或 --grep 选项,该模式在 it() 内部的测试名称上运行,而不是文件系统。当前的文档在这方面具有误导性和/或完全错误。要将整个命令限制为文件系统的一部分,您可以传递一个模式作为最后一个参数(它不是标志)。

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

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

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

mocha --reporter spec --grep "Fnord:" server-test/*.js
于 2012-10-24T23:08:39.140 回答
29

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

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

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

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

{
  ...

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

更多选项在这里

于 2019-04-14T22:25:33.057 回答
20

现在一天(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

于 2020-01-16T14:06:52.160 回答
20

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

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

或使用--recursive开关

mocha --recursive test_directory/
于 2017-06-15T17:15:23.027 回答
11

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

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

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

于 2015-08-03T18:29:14.897 回答
4

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

mocha --recursive "some_dir"

于 2017-05-25T11:53:14.850 回答
3

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

使用“test/unit/*.js”选项在 Windows 上不起作用。出于充分的理由,Windows shell 不会像 unixen 那样扩展通配符。

但是使用“测试/单元”确实有效,没有文件模式。例如。"mocha test/unit" 运行在 test/unit 文件夹中找到的所有文件。

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

此外,要运行单个测试文件,您可以指定完整路径和文件名。例如。“摩卡测试/单元/mytest1.js”

我实际上在 package.json 中为 npm "scripts": { "test": "mocha test/unit" } 设置,

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

于 2013-03-18T13:31:58.247 回答
3

如果您使用nodejs, 在您的package.jsonscripts

  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"子文档

然后正常运行你的测试npm test

于 2017-04-30T23:42:00.427 回答
2

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

于 2012-05-25T12:08:35.937 回答
2

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

*/tests/*.js --recursivemocha.opts

如果您想指定要在其中查找测试的确切文件夹,我做了这样的事情:

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

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

于 2018-05-29T15:22:17.250 回答
0

Windows 中的另一个选项可能是使用cross-env包并遵循 npm 脚本package.json

"scripts": {
    "test": "cross-env mocha '*.test.js'"
  },
"devDependencies": {
    "cross-env": "latest",
}

在这种情况下,根文件夹中模式为 *.test.js 的所有测试文件都将由 mocha 运行。

于 2022-01-28T22:03:25.350 回答