[英]How to run a single test with Mocha?
我使用 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)
调用的it(name, fn)
。
考虑使用嵌套的describe()
调用进行命名空间,以便轻松定位和选择特定的集合。
根据您的使用模式,你可能只是想只用。 我们使用 TDD 风格; 它看起来像这样:
test.only('Date part of valid Partition Key', function (done) {
//...
}
只有这个测试才会从所有文件/套件运行。
如果您使用npm test
(使用 package.json 脚本),请使用额外的--
将参数传递给 mocha
例如npm test -- --grep "my second test"
编辑:看起来--grep
可能有点挑剔(可能取决于其他参数)。 你可以:
修改package.json:
"test:mocha": "mocha --grep \"<DealsList />\" .",
或者使用--bail
似乎不那么挑剔
npm test -- --bail
只需在“描述”、“它”或“上下文”之前使用 .only。 我使用“$npm run test:unit”运行,它只执行带有 .only 的单元。
describe.only('get success', function() {
// ...
});
it.only('should return 1', function() {
// ...
});
实际上,如果您从 mocha 中删除 glob 模式(例如./test/**/*.spec.js
),您还可以通过文件名(不仅仅是“it()-string-grepping”)运行单个 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-File 中的各种开关(以--
开头),但您不能覆盖 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
注意--
它将后面的任何文本链接到npm
脚本
有多种方法可以做到这一点。
如果您只想从整个测试用例列表中运行一个测试,那么您只能在测试用例之前编写。
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”
it.only('Test one ', () => {
expect(x).to.equal(y);
});
it('Test two ', () => {
expect(x).to.equal(y);
});
在这第一个只会执行
嗨,上述解决方案对我不起作用。 运行单个测试的另一种方法是
mocha test/cartcheckout/checkout.js -g 'Test Name Goes here'
这有助于从单个文件和特定名称运行测试用例。
对于那些希望运行单个文件但他们无法使其工作的人,对我有用的是我需要将我的测试用例包装在下面的描述套件中,然后使用描述标题,例如“我的测试描述”作为模式.
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"
不知道为什么 grep 方法在使用 npm test 时对我不起作用。 这虽然有效。 由于某种原因,我还需要指定测试文件夹。
npm test -- test/sometest.js
使用Mocha 的--fgrep
(或只是 -f),您可以选择包含字符串的测试,例如:
mocha -f 'my test x'
将在it()
、 describe()
或context()
块中运行包含my test x
所有测试。
将所有测试合并到一个 test.js 文件中,并将您的包 json 添加脚本为:
"scripts": {
"api:test": "node_modules/.bin/mocha --timeout 10000 --recursive api_test/"
},
在您的测试目录中键入命令:
npm run api:test
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.