【发布时间】:2012-06-05 14:49:26
【问题描述】:
我使用 Mocha 来测试我的 JavaScript 内容。我的测试文件包含 5 个测试。是否可以运行特定测试(或一组测试)而不是文件中的所有测试?
【问题讨论】:
标签: javascript mocha.js
我使用 Mocha 来测试我的 JavaScript 内容。我的测试文件包含 5 个测试。是否可以运行特定测试(或一组测试)而不是文件中的所有测试?
【问题讨论】:
标签: javascript mocha.js
-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'
运行单个测试。请注意,此 greps 跨越所有 describe(name, fn) 和 it(name, fn) 调用的名称。
考虑使用嵌套的describe() 调用命名空间,以便于定位和选择特定集合。
【讨论】:
--grep 仅从 @ 标签中过滤出来。
mocha some/test.js) 上指定文件根本不起作用。谢谢!
logs a 子字符串的logs a bcd?正则表达式^$ 不适用于 0.10.2。
根据您的使用模式,您可能只想使用 only。我们使用 TDD 风格;它看起来像这样:
test.only('Date part of valid Partition Key', function (done) {
//...
}
只有这个测试将从所有文件/套件中运行。
【讨论】:
it.only。
it.only 不能与mocha-testdata 的given 一起使用。以后很容易忘记将其删除。
eslint-plugin-mocha 有一个规则 no-exclusive-tests,如果你忘记删除 .only,它会抓住你。
如果您使用 npm test(使用 package.json 脚本),请使用额外的 -- 将参数传递给 mocha
例如npm test -- --grep "my second test"
编辑:看起来--grep 可能有点挑剔(可能取决于其他参数)。你可以:
修改package.json:
"test:mocha": "mocha --grep \"<DealsList />\" .",
或者使用--bail,这似乎不那么挑剔
npm test -- --bail
【讨论】:
--grep 可能有点麻烦 - 尝试在 npm 脚本条目中将其放在 mocha 之后。否则 npm test -- --bail 可用于在第一次失败测试后退出
--grep 之前传递额外的破折号拯救了我的一天!非常感谢。 PS。我在 Windows 上,运行 npm test -- --grep @tag
不确定为什么在使用 npm 测试时 grep 方法对我不起作用。这虽然有效。由于某种原因,我还需要指定测试文件夹。
npm test -- test/sometest.js
【讨论】:
您好,以上解决方案对我不起作用。 运行单个测试的另一种方式是
mocha test/cartcheckout/checkout.js -g 'Test Name Goes here'
这有助于从单个文件和特定名称运行测试用例。
【讨论】:
-g 具有足够选择性的表达式,您无需指定文件名。如果你不能编写一个足够有选择性的表达式,那意味着你没有正确命名你的测试。
您可以通过多种方式做到这一点。
如果您只想从整个测试用例列表中运行一个测试,那么您可以在测试用例之前写only。
it.only('<test scenario name>', function() {
// ...
});
或者你也可以执行下面的 mocha grep 命令
mocha -g <test-scenario-name>
如果你想运行一个描述部分中的所有测试用例,那么你也可以只写描述。
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" 下的别名条目时)更改测试用例。更多上下文:medium.com/@cnadeau_/…
实际上,如果您从mocha.opts,分别创建一个副本,没有:
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 文件中的各种开关(以 -- 开头),但您 can't override the glob。该链接也有
一些解释。
提示:如果node_modules/.bin/mocha 让您感到困惑,请使用本地包 mocha。你也可以只写mocha,如果你已经全局安装了它。
如果你想要package.json 的舒适感:仍然:从你的mocha.opts 中删除**/*-ish glob,将它们插入这里,用于所有测试,将它们留在单个测试中:
"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
mind the -- 将后面的任何文本链接到npm 脚本
【讨论】:
Warning: Could not find any test files matching pattern: $1
【讨论】:
将所有测试合并到一个 test.js 文件中,并将您的包 json 添加脚本为:
"scripts": {
"api:test": "node_modules/.bin/mocha --timeout 10000 --recursive api_test/"
},
在你的测试目录输入命令:
npm run api:test
【讨论】:
你可以试试“it.only”
it.only('Test one ', () => {
expect(x).to.equal(y);
});
it('Test two ', () => {
expect(x).to.equal(y);
});
这里只有第一个会执行
【讨论】:
--forbid-only 执行测试,则很危险。 .only 倾向于潜入主分支并使其他测试静音,因为它们将不再执行。我开始想到更改代码以运行不同测试的工作流程是一种反特性。测试运行者应该确定应该执行哪些测试(也称为标记测试)而不是开发人员。
it.only 的代码提交给repo
只需在“描述”、“它”或“上下文”之前使用 .only。我使用“$npm run test:unit”运行,它只执行带有 .only 的单元。
describe.only('get success', function() {
// ...
});
it.only('should return 1', function() {
// ...
});
【讨论】:
对于那些希望运行单个文件但他们无法使其工作的人,对我有用的是我需要将我的测试用例包装在如下描述套件中,然后使用描述标题,例如“我的测试描述”作为模式。
describe('My Test Description', () => {
it('test case 1', () => {
// My test code
})
it('test case 2', () => {
// My test code
})
})
然后运行
yarn test -g "My Test Description"
或
npm run test -g "My Test Description"
【讨论】:
使用Mocha's --fgrep(或只是-f)可以选择包含字符串的测试,例如:
mocha -f 'my test x'
将运行所有包含it()、describe() 或context() 块中的my test x 的测试。
【讨论】: