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


当前回答

对于那些希望运行单个文件但又不能使其工作的人来说,对我有用的是,我需要将我的测试用例包装在如下所示的描述套件中,然后使用描述标题,例如。'My Test Description'作为模式。

describe('My Test Description', () => {
  it('test case 1', () => {
    // My test code
  })
  it('test case 2', () => {
  // My test code
  })
})

然后运行

纱线测试-g“我的测试描述”

or

运行我的测试说明

其他回答

尝试使用摩卡的——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'

运行单个测试。注意,这个greps对所有describe(name, fn)和it(name, fn)调用的名称都适用。

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

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

mocha -f 'my test x'

将在it()、describe()或context()块中运行包含我的测试x的所有测试。

执行single test - by filename -

实际上,如果你从你的mocha中删除glob模式(例如./test/**/*.spec.js),你也可以通过文件名(而不仅仅是通过" it()-string-grepping ")来运行一个单独的mocha测试。选项,分别创建一个副本,没有:

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

背景:虽然你可以覆盖options - file中的各种开关(从——开始),但你不能覆盖glob。这种联系也有 一些解释。

提示:如果node_modules/.bin/mocha让你感到困惑,请使用本地包mocha。你也可以只写mocha,如果你全局安装了它。


如果你想要舒适的包装。仍然:从摩卡中删除**/*-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脚本

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

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

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

你可以试试"it.only"

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

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

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