Mocha尝试在默认情况下找到测试文件,我如何指定另一个目录,例如服务器-测试?
当前回答
不要使用-g或——grep选项,该模式操作的是it()内部的测试名称,而不是文件系统。目前的文件在这方面是误导和/或完全错误的。为了将整个命令限制在文件系统的一部分,您可以将一个模式作为最后一个参数(它不是一个标志)。
例如,这个命令会将你的报表设置为spec,但只会测试server-test目录下的js文件:
mocha --reporter spec server-test/*.js
这个命令的作用和上面一样,而且它只会运行测试用例,其中测试的it()字符串/定义以"Fnord:"开头:
mocha --reporter spec --grep "Fnord:" server-test/*.js
其他回答
我刚刚遇到了这个问题,并通过删除——recursive选项(我已经设置了)并使用上面建议的相同结构来解决它:
mochify “test/unit/**/*.js”
这为我运行了/test/unit/下所有目录下的所有测试,而忽略了/test/下的其他目录
对于更改测试目录,这似乎不是任何“简单”的支持。 然而,也许你应该看看这个问题,相对于你的问题。
现在一天(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
这样做的好方法是在包中添加一个“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
看到这里的模式了吗?好。:)一致性打败了村。
这里有一种方法,如果你的测试文件夹中有子文件夹。
/test
/test/server-test
/test/other-test
然后在linux中,你可以使用find命令递归地列出所有*.js文件,并将其传递给mocha:
mocha $(find test -name '*.js')
推荐文章
- “node_modules”文件夹应该包含在git存储库中吗
- 从导入的模块中模拟函数
- 在单元测试中设置HttpContext.Current.Session
- 使用package.json在全局和本地安装依赖项
- this.libOptions.parse不是一个函数
- 对嵌套文件夹运行npm install的最好方法是什么?
- 节点Multer异常字段
- 何时使用Mockito.verify()?
- 在PHP单元测试执行期间,如何在CLI中输出?
- 很好的初学者教程socket.io?
- 单元测试的一些常用命名约定是什么?
- 如何在摩卡编程跳过测试?
- CALL_AND_RETRY_LAST分配失败-进程内存不足
- 在Ubuntu上安装Node.js
- 使用express.js代理