如何使用Mocha运行单个测试?

时间:2012-05-31 10:43:19

标签: javascript mocha

我使用Mocha来测试我的JavaScript内容。我的测试文件包含5个测试。是否可以运行特定的测试(或一组测试)而不是文件中的所有测试?

13 个答案:

答案 0 :(得分:297)

尝试使用mocha's --grep option

    -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()调用命名空间,以便于查找和选择特定的设置。

答案 1 :(得分:143)

根据您的使用模式,您可能只想使用 。我们使用TDD风格;它看起来像这样:

test.only('Date part of valid Partition Key', function (done) {
    //...
}

只有这个测试才会从所有文件/套件中运行。

答案 2 :(得分:63)

如果您正在使用npm test(使用package.json脚本),请使用额外的--将参数传递给mocha

e.g。 npm test -- --grep "my second test"

编辑:看起来--grep可能有些挑剔(可能取决于其他参数)。你可以:

修改package.json:

"test:mocha": "mocha --grep \"<DealsList />\" .",

或者使用似乎不那么挑剔的--bail

npm test -- --bail

答案 3 :(得分:10)

运行单一测试-by filename -

实际上,如果删除glob模式(例如./test/**/*.spec.js),也可以运行单个mocha测试按文件名(不仅仅是“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中的各种开关(从--开始)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 $1",
"test-single-watch": "mocha -R list -w $1",

用法:

> npm run test
分别

> npm run test-single -- test/ES6.self-test.spec.js 

(请注意--!)

答案 4 :(得分:8)

以上解决方案对我没有用。 另一种运行单个测试的方法是

mocha test/cartcheckout/checkout.js -g 'Test Name Goes here'

这有助于从单个文件和特定名称运行测试用例。

答案 5 :(得分:7)

npm test <filepath>

例如:

npm test test/api/controllers/test.js

这里'test / api / controllers / test.js'是文件路径。

答案 6 :(得分:3)

您可以尝试“仅它”。

List<Task<bool>> tasks = new List<Task<bool>>();                

Parallel.For(0, 500, file =>
{
  tasks.Add(SomeTask());
});

Console.WriteLine("Total tasks = " + tasks.Count);

在这种情况下,第一个只会执行

答案 7 :(得分:3)

对于那些希望运行单个文件的人,但他们无法使其正常工作,对我而言,最有效的方法是,我需要将测试用例包装在以下描述的套件中,然后使用描述标题,例如“我的测试说明”作为模式。

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"

答案 8 :(得分:0)

在使用npm测试时,不确定为什么grep方法对我不起作用。这虽然有效。我还需要出于某种原因指定测试文件夹。

npm test - test / sometest.js

答案 9 :(得分:0)

关注https://mochajs.org/#usage 我们看到只需使用

  

mocha测试/ myfile

将起作用。您可以在末尾省略“ .js”。

答案 10 :(得分:0)

将所有测试合并到一个test.js文件中,并将程序包json添加脚本为:

  "scripts": {
  "api:test": "node_modules/.bin/mocha --timeout 10000 --recursive api_test/"
},

在测试目录上键入命令:

npm run api:test

答案 11 :(得分:0)

仅在'describe','it'或'context'之前使用。我使用“ $ npm run test:unit”运行,它仅使用.only执行单元。

describe.only('get success', function() {
 // ...
});

it.only('should return 1', function() {
  // ...
});

答案 12 :(得分:0)

使用 Mocha's --fgrep(或仅 -f)可以选择包含字符串的测试,例如:

mocha -f 'my test x'

将在 my test xit()describe() 块中运行所有包含 context() 的测试。