如何指定摩卡的测试目录?

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

207299 次浏览

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

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

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

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

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

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

例如,这个命令会将你的报表设置为spec,但只会测试server-test目录下的js文件:

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

这个命令的作用和上面一样,而且它只会运行测试用例,其中测试的it()字符串/定义以"Fnord:"开头:

mocha --reporter spec --grep "Fnord:" server-test/*.js
我在Windows 7上使用node.js v0.10.0和mocha v1.8.2和npm v1.2.14。 我只是想让摩卡使用路径测试/单元来找到我的测试, 在花了很长时间并尝试了一些东西之后,我终于着陆了,

使用"test/unit/*.js"选项在windows上无效。 windows shell没有像unixen那样展开通配符,这是有原因的 然而,使用“test/unit”可以工作,没有文件模式。 如。"mocha test/unit"将运行test/unit文件夹下的所有文件

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

如果要运行单个测试文件,可以指定完整的路径和文件名。 如。“摩卡测试/单位/ mytest1.js”< / p >

我实际上在包中设置。NPM Json "脚本":{ “测试”:“摩卡测试/单元” }, < / p >

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

用这个:

mocha server-test

或者如果你有子目录,使用这个:

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

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

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


如果你仍然想在命令行上运行mocha,但想在文件夹./server-tests而不是./test中运行测试,在./test/mocha.opts中创建一个文件,文件中只包含以下内容:

server-tests

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

server-tests
--recursive

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

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

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

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

如果你正在使用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

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

mocha --recursive "some_dir"

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

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

或使用--recursive开关

mocha --recursive test_directory/

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

mocha.opts中的*/tests/*.js --recursive

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

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

我希望这能帮助那些需要比其他答案更多的人

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

让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也是大多数老式的“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

看到这里的模式了吗?好。:)一致性战胜了不均匀

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

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

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

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

{
...


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

更多的选项是在这里

你可以使用Mocha配置文件来处理这个问题:

第一步:应用程序的根的位置中的创建.mocharc.js文件

步骤2:mocha配置文件中代码下面的添加:

'use strict';


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

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

windows中的另一个选项可以使用cross-env包并在package.json中跟随npm脚本

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

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