Mocha尝试在默认情况下找到测试文件,我如何指定另一个目录,例如服务器-测试?


当前回答

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

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

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

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

其他回答

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

mochify “test/unit/**/*.js”

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

这样做的好方法是在包中添加一个“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

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

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

*/tests/*.js——在mocha.opts中递归

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

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

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

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

选项1:创建.mocharc。Json在项目的根目录:

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

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

{
  ...

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

这里有更多的选择。

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