我使用Mocha来测试JavaScript代码。我的测试文件包含5个测试用例。是否有可能只运行特定的一个测试用例,或一组测试用例而不是运行文件中所有的测试用例?
我使用Mocha来测试JavaScript代码。我的测试文件包含5个测试用例。是否有可能只运行特定的一个测试用例,或一组测试用例而不是运行文件中所有的测试用例?
尝试使用mocha的--grep
选项:
-g, --grep <pattern> only run tests matching <pattern>
您可以使用任何有效的JavaScript正则表达式作为<pattern>
。例如,如果我们有test/mytest.js
:
it('logs a', function(done) {
console.log('a');
done();
});
it('logs b', function(done) {
console.log('b');
done();
});
那么:
$ mocha -g 'logs a'
运行单个测试。请注意,这会搜索所有describe(name, fn)
和it(name, fn)
调用的名称。
考虑使用嵌套的describe()
调用进行命名空间分组,以便更轻松地定位和选择特定的测试集。
根据您的使用模式,您可能只想使用only。我们使用TDD风格; 它看起来像这样:
test.only('Date part of valid Partition Key', function (done) {
//...
}
只有这个测试将从所有的文件/套件中运行。
it.only
来实现。 - elkelkeslint-plugin-mocha
有一个规则叫做no-exclusive-tests
,如果你忘记移除.only
,它将会提示你。 - dostunpm test
(使用package.json脚本),请使用额外的--
将参数传递给mocha。npm test -- --grep"my second test"
编辑:看起来--grep
可能有点棘手(可能取决于其他参数)。 您可以:"test:mocha": "mocha --grep \"<DealsList />\" .",
或者可以使用--bail
,这似乎不那么挑剔
npm test -- --bail
--grep
可能有点挑剔 - 尝试将其放在 npm 脚本条目中的 mocha 之后。否则,npm test -- --bail
在第一个失败的测试后退出很有用。 - Ashley Coolman--grep
之前添加额外的破折号,救了我的一天!非常感谢。附注:我正在Windows上运行npm test -- --grep @tag
。 - Mykola只需在“describe”,“it”或“context”之前使用“.only”。我通过"$npm run test:unit"运行,它只执行带有.only的单元测试。
describe.only('get success', function() {
// ...
});
it.only('should return 1', function() {
// ...
});
实际上,您也可以通过文件名(而不仅仅是通过“it()-string-grepping”)来运行单个mocha测试,如果您从mocha.opts中删除全局模式(例如./test/**/*.spec.js
),或者创建一个没有全局模式的副本。
node_modules/.bin/mocha --opts test/mocha.single.opts test/self-test.spec.js
这是我的mocha.single.opts文件(唯一的区别是缺少上述的glob行)
--require ./test/common.js
--compilers js:babel-core/register
--reporter list
--recursive
背景:虽然您可以覆盖opts文件中的各种开关(以--
开头),但是您无法覆盖全局匹配模式。该链接也有一些解释。
提示:如果node_modules/.bin/mocha
令您困惑,请使用本地包mocha。如果您已经全局安装了它,您也可以写mocha
。
如果您想要使用package.json
:仍需从mocha.opts
中删除类似于**/*
的全局匹配模式,在此处插入它们进行全部测试,对于单个测试,请将它们留空。
"test": "mocha ./test/**/*.spec.js",
"test-watch": "mocha -R list -w ./test/**/*.spec.js",
"test-single": "mocha",
"test-single-watch": "mocha -R list -w",
用法:
> npm run test
分别
> npm run test-single -- test/ES6.self-test.spec.js
注意使用--
,它会将其后的任何文本链接到npm
脚本
有多种方法可以做到这一点。
如果您只想运行测试用例列表中的一个测试,那么您可以在测试用例前加上only。
it.only('<test scenario name>', function() {
// ...
});
您还可以按以下方式执行mocha grep命令
mocha -g <test-scenario-name>
如果您想运行位于一个describe部分内的所有测试用例,那么您也可以只编写一个描述。
describe.only('<Description of the tests under this section>', function() {
// ...
});
如果您有多个测试文件,希望只运行其中一个,则可以按照以下命令操作。
npm test <filepath>
例如:
npm test test/api/controllers/test.js
这里的“test/api/controllers/test.js”是文件路径。
it.only()
语法非常巧妙,特别是当你不想每次更改测试用例时修改 package.json
(即当单元测试运行器是 "scripts"
下的别名条目时)更是如此。更多上下文请参见:https://medium.com/@cnadeau_/mocha-running-a-single-test-in-dev-64f2dc509f99 - kip2你可以尝试使用 "it.only"
it.only('Test one ', () => {
expect(x).to.equal(y);
});
it('Test two ', () => {
expect(x).to.equal(y);
});
只有第一个会执行
--forbid-only
执行测试,会产生一定的风险。.only
很容易出现在主分支中,从而使得其他测试失效,因为它们不再被执行。我认为将更改代码以运行不同的测试的工作流程视为反功能特性。测试运行器应该确定哪些测试应该被执行(即标记测试),而不是开发人员。 - k0pernikusit.only
的代码提交到代码库。 - Bikesh M您好,上述解决方案对我无效。运行单个测试的另一种方法为
mocha test/cartcheckout/checkout.js -g 'Test Name Goes here'
这有助于从单个文件中运行特定名称的测试用例。
-g
,就不需要指定文件名。如果无法编写足够具有选择性的表达式,则意味着您未正确命名测试。 - Louis使用Mocha的--fgrep
(或仅使用-f)可以选择包含字符串的测试,例如:
mocha -f 'my test x'
将运行包含my test x
的所有测试,无论是在it()
、describe()
还是context()
块中。
mocha some/test.js
)根本不起作用。谢谢! - hrabannpm run test --grep ./test/bootstrap.test.js ./test/integration/controllers/AccountManagementController-v2.test.js
- Neel Rathod