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

Mis*_*hko 263 javascript mocha.js

我用Mocha来测试我的JavaScript东西.我的测试文件包含5个测试.是否可以运行特定测试(或测试集)而不是文件中的所有测试?

Ash*_*she 327

尝试使用mocha的--grep选项:

    -g, --grep <pattern>            only run tests matching <pattern>
Run Code Online (Sandbox Code Playgroud)

您可以使用任何有效的JavaScript正则表达式<pattern>.例如,如果我们有test/mytest.js:

it('logs a', function(done) {
  console.log('a');
  done();
});

it('logs b', function(done) {
  console.log('b');
  done();
});
Run Code Online (Sandbox Code Playgroud)

然后:

$ mocha -g 'logs a'
Run Code Online (Sandbox Code Playgroud)

运行单个测试.请注意,这会覆盖所有describe(name, fn)it(name, fn)调用的名称.

考虑describe()对命名空间使用嵌套调用,以便于查找和选择特定集合.

  • 当以编程方式使用Mocha时(例如来自Grunt),有一个catch:grep选项需要是一个'RegExp()'对象.如果它是一个字符串,它将被转义. (4认同)
  • 有什么方法可以避免运行包含“logs a”子字符串的“logs a bcd”?正则表达式 `^$` 在 0.10.2 上不起作用。 (2认同)

J B*_*ett 151

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

test.only('Date part of valid Partition Key', function (done) {
    //...
}
Run Code Online (Sandbox Code Playgroud)

只有这个测试将从所有文件/套件运行.

  • 使用chai和expect语法将是`it.only`. (12认同)
  • `eslint-plugin-mocha` 有一个规则 `no-exclusive-tests`,如果你忘记删除 `.only`,它会抓住你。 (6认同)
  • BDD的工作方式相同.这对于您进行单个测试非常有用.它也可以在套件/描述级别使用 (5认同)
  • 这个答案更好,因为当从业力内等使用摩卡时它也会起作用. (3认同)
  • `it.only`不能与[mocha-testdata](https://github.com/pandell/mocha-testdata)的`given`一起使用.而且以后很容易忘记删除它. (2认同)
  • 值得一提的是,在提交时很容易忘记删除“.only”,这可能意味着只有测试子集在 CI 中运行 - 不好。 (2认同)

Ash*_*man 74

如果您正在使用npm test(使用package.json脚本),请使用extra --将param传递给mocha

例如 npm test -- --grep "my second test"

编辑:看起来--grep可能有点挑剔(可能取决于其他参数).您可以:

修改package.json:

"test:mocha": "mocha --grep \"<DealsList />\" .",
Run Code Online (Sandbox Code Playgroud)

或者使用--bail似乎不那么繁琐的用途

npm test -- --bail
Run Code Online (Sandbox Code Playgroud)

  • 为我工作。谢谢 :) (2认同)
  • @Andy `--grep ` 可能有点挑剔 - 尝试将其放在 npm 脚本条目中的 mocha 之后。否则 `npm test -- --bail` 对于第一次失败测试后的保释很有用 (2认同)
  • 在 `--grep` 之前传递额外的破折号救了我的命!多谢。附言。我在 Windows 上运行 `npm test -- --grep @tag` (2认同)

Qau*_*nMZ 37

只需在“描述”、“它”或“上下文”之前使用 .only。我使用“$npm run test:unit”运行,它只执行带有 .only 的单元。

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

it.only('should return 1', function() {
  // ...
});
Run Code Online (Sandbox Code Playgroud)


Fra*_*cke 14

运行单一测试-by filename-

实际上,如果从mocha.opts中删除glob模式(例如),分别创建一个副本,也可以按文件名运行单个mocha测试(不仅仅是"it() - string-grepping")./test/**/*.spec.js,不需要:

node_modules/.bin/mocha --opts test/mocha.single.opts test/self-test.spec.js
Run Code Online (Sandbox Code Playgroud)

这是我的mocha.single.opts(它只是缺少前面提到的glob线)

--require ./test/common.js
--compilers js:babel-core/register
--reporter list
--recursive
Run Code Online (Sandbox Code Playgroud)

背景:虽然您可以从opts-File(从头开始--)覆盖各种开关,但您无法覆盖glob.该链接也有一些解释.

提示:如果node_modules/.bin/mocha困惑你,使用本地包mocha.mocha如果您已全局安装,也可以只编写.


如果您想要以下方面的舒适package.json:静态:**/*从您的中移除-ish glob mocha.opts,将它们插入此处,进行全部测试,将它们留给单个测试:

"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",
Run Code Online (Sandbox Code Playgroud)

用法:

> npm run test
Run Code Online (Sandbox Code Playgroud)

分别

> npm run test-single -- test/ES6.self-test.spec.js 
Run Code Online (Sandbox Code Playgroud)

(介意--!)


Jit*_*war 10

npm test <filepath>
Run Code Online (Sandbox Code Playgroud)

例如:

npm test test/api/controllers/test.js
Run Code Online (Sandbox Code Playgroud)

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


Rut*_*war 8

嗨以上解决方案对我不起作用.运行单个测试的另一种方法是

mocha test/cartcheckout/checkout.js -g 'Test Name Goes here'
Run Code Online (Sandbox Code Playgroud)

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

  • 使用对“-g”有足够选择性的表达式,并且您不需要指定文件名。如果您无法编写具有足够选择性的表达式,则意味着您没有正确命名测试。 (2认同)

Dav*_*ave 6

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

摩卡测试/我的文件

将工作。您可以省略末尾的“.js”。


小智 6

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

mocha -f 'my test x'
Run Code Online (Sandbox Code Playgroud)

将运行my test x包含it(),describe()context()块中的所有测试。


And*_*y N 5

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

npm test -- test/sometest.js
Run Code Online (Sandbox Code Playgroud)


Bik*_*h M 5

您可以尝试“仅它”

 it.only('Test one ', () => {

            expect(x).to.equal(y);
        });
it('Test two ', () => {

            expect(x).to.equal(y);
        });
Run Code Online (Sandbox Code Playgroud)

在这第一个只会执行

  • 如果未在CI /构建服务器上通过“ --forbid-only”执行测试,则存在危险。`.only`倾向于偷偷进入主分支并使其他测试静音,因为它们将不再执行。我想到将更改代码以运行不同测试的工作流程视为反功能。测试运行者应确定应执行哪些测试(也称为标记测试)而不是开发人员。 (2认同)

Muh*_*mad 5

对于那些想要运行单个文件但无法使其工作的人来说,对我有用的是我需要将测试用例包装在描述套件中,如下所示,然后使用描述标题(例如“我的测试描述”)作为模式。

describe('My Test Description', () => {
  it('test case 1', () => {
    // My test code
  })
  it('test case 2', () => {
  // My test code
  })
})
Run Code Online (Sandbox Code Playgroud)

然后运行

yarn test -g "My Test Description"

或者

npm run test -g "My Test Description"