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

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

246135 次浏览

尝试使用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'

运行单个测试。请注意,这个greps横跨所有describe(name, fn)it(name, fn)调用的名称。

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

根据您的使用模式,您可能只喜欢使用只有。我们使用TDD风格;它是这样的:

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

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

如果你正在使用npm test (using package. properties)。json脚本)使用额外的--将参数传递给mocha

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

编辑:看起来--grep可能有点繁琐(可能取决于其他参数)。您可以:

修改package.json:

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

或者使用--bail,这似乎不那么繁琐

npm test -- --bail

不知道为什么grep方法在使用npm测试时不适合我。不过这是可行的。出于某种原因,我还需要指定测试文件夹。

npm test -- test/sometest.js

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

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

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

有多种方法可以做到这一点。

  • 如果你只想从你的整个测试用例列表中运行一个测试,那么你可以在你的测试用例之前写只有

    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'是文件路径。

执行single test - by filename -

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

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。这种联系也有 一些解释。< / p >

提示:如果node_modules/.bin/mocha混淆你,使用本地包mocha。你也可以只写mocha,如果你全局安装了它。


如果你想要package.json: Still的舒适:从你的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脚本

查看医生,我们可以看到简单地使用:

mocha test/myfile

将工作。你可以省略结尾的'.js'。

将所有测试合并到一个test.js文件中,并在package.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);
});

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

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

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


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

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

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"

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

mocha -f 'my test x'

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