如何指定摩卡测试目录?


219

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


虽然不是100%回答您的问题,但请查看jaketrent.com/post/run-single-mocha-test-我是来这里寻找如何运行特定测试套件的,这表明您可以使用.only.skip管理哪些测试正在跑步。当您不想一直等待整个测试套件一直运行时,在开发特定功能时很重要。
戴夫萨格2014年

Answers:


141

编辑:不建议使用此选项:https : //mochajs.org/#mochaopts


如果要通过仍然仅mocha在命令行上运行但要在文件夹./server-tests而不是中运行测试来执行此操作,请在文件中./test创建一个文件,./test/mocha.opts其中包含以下内容:

server-tests

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

server-tests
--recursive

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


12
这是摩擦最小的选项,并且应该是公认的答案恕我直言
Nick Tomlin 2015年

我正在使用其中一个样板,并且在下一行中,可能是因为Windows,请检查一次。node ./node_modules/mocha/bin/mocha $ {find api -name'* -test.js') --compilers js:babel-core / register
神户,

1
一颗宝石,也可以很好地与Webstorm IDE摩卡调试配置配合使用,只需选择“文件模式”并将输入保留为空,它将使用mocha.opts
danday74 '17

3
那肯定是最好的答案。很可能值得在您的答案中添加一个mocha.opts文件,该文件可以放在您想要的任何位置,然后只需执行以下操作即可mocha指定其配置文件的路径,例如:mocha --opts ./mocha.opts
quirimmo

1
您也可以只将--recursive放在mocha命令行中,如果您在package.json中定义测试脚本,则很有用
取消了

282

用这个:

mocha server-test

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

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

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


1
这对我不起作用。如果我想这样做,我必须做mocha test/server-test
珍妮

22
双引号问题使我久违了!谢谢您保存我的理智。喊给阅读此文章的所有人,以格外注意那些双引号。
ctrlplusb 2015年

11
就我而言,我正在使用mocha ./**/*.test.js(因此可以将测试文件与模块文件并置)。当我在文件层次结构中添加与其余测试不同的级别的测试文件时,该模式对我来说不再起作用,并且只会发现一个奇数球文件,而不是生活在该层次结构中同一级别的其他十几个文件。用引号包裹可解决此问题。
Stoutie 2015年

1
或仅使用--recursive我在下面解释的内容
Jeff Dickey

4
这应该是答案!双引号救了我
Minh Thai

81

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

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

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

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

29
或仅使用--recursive我在下面解释的内容
Jeff Dickey

5
所以换句话说mocha,没有选项可以在config中设置所需的目录结构吗?
格林

客户端用户$ mocha $(查找测试-name'* .js')-bash:mocha:找不到命令; 收到此错误。
lft93ryt

1
这太复杂了,容易产生误导。首选摩卡选项而不是使用OS命令。
迈克尔·布什

您的帖子没有回答问题
ekkis,

30

这样做的好方法是在package.json中添加一个“ test” npm脚本,该脚本使用正确的参数调用mocha。这样,您的package.json也可以描述您的测试结构。它还避免了其他答案(双引号与单引号,“查找”等)中的所有这些跨平台问题。

要使摩卡运行“ test”目录中的所有js文件:

"scripts": {
    "start": "node ./bin/www", -- not required for tests, just here for context
    "test": "mocha test/**/*.js"
  },

然后仅运行烟雾测试调用:

npm test

您可以通过这种方式标准化所有项目中所有测试的运行,因此,当新的开发人员在您的项目或其他项目上启动时,他们知道“ npm test”将运行这些测试。这样做有很好的历史先例(例如,Maven,大多数老派的“ make”项目也是如此)。当所有项目都具有相同的测试命令时,它肯定会帮助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


我猜这是最准确的方法。
ArturS

29

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

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

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

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

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

22

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

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

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

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

{
  ...

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

更多选项在这里


20

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

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

或使用--recursive开关

mocha --recursive test_directory/

11

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

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

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



3

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

在Windows上无法使用“ test / unit / *。js”选项。出于很好的理由,Windows Shell不会像unixen一样扩展通配符。

但是,使用“测试/单位”确实可以工作,而无需使用文件模式。例如。“ mocha test / unit”运行在test / unit文件夹中找到的所有文件。

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

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

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

这样,“ npm测试”就可以运行我的单元测试了。


11
从今天起,您可以使用以下--recursive选项:mocha --recursive "some_dir"
superjos 2014年

3
node_modules\.bin\mocha "test\unit\*.js"在Windows上使用作品。也node_modules\.bin\mocha "**\*.js"可以(我的真实情况)。但是我正在寻找一种排除node_modules目录的方法。(我也使用gulpfile.js,但有时我需要直接通过mocha启动测试)
Alex 75

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

然后只需正常运行测试即可 npm test


我发现它npm run mocha "./test/*.spec.js!(~)"忽略了glob参数,但node_modules/.bin/mocha "./test/*.spec.js!(~)"事实并非如此。
ironchicken

@ironchicken将参数传递给“ npm run”使用-如npm run mocha -- yourArgs
Pedro A

3

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

mocha --recursive "some_dir"


2

对于更改测试目录,这似乎没有任何“轻松”支持。
但是,也许您应该相对于您的问题来看看这个问题。


2

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

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

如果您想指定要在其中查找测试的确切文件夹,则可以执行以下操作:

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

我希望这对需要更多其他答案的人有所帮助

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.