383

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

4

13 回答 13

451

尝试使用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()调用,以便于定位和选择特定集合。

于 2012-05-31T12:29:32.733 回答
203

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

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

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

于 2012-08-31T19:21:30.387 回答
115

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

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

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

修改package.json:

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

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

npm test -- --bail
于 2016-08-18T07:37:02.833 回答
52

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

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

it.only('should return 1', function() {
  // ...
});
于 2019-05-17T16:53:01.860 回答
25

运行单个测试——按文件名——</h2>

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

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如果您已全局安装它,您也可以编写 just 。


如果您想要以下的舒适package.json: 仍然:**/*从您的 中删除 -ish glob mocha.opts,将它们插入此处,以进行所有测试,将它们留在单次测试中:

"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 

注意--which 将其后的任何文本链接到npm脚本

于 2017-10-16T09:17:50.663 回答
23

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

  • 如果您只想从整个测试用例列表中运行一个测试,那么您只能在测试用例之前编写。

    it.only('<test scenario name>', function() {
      // ...
    });
    

    或者您也可以执行 mocha grep 命令,如下所示

    mocha -g <test-scenario-name>
    
  • 如果你想运行一个 describe 部分中的所有测试用例,那么你也可以只写 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' 是文件路径。

于 2017-08-09T12:57:51.003 回答
14

你可以试试“it.only”

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

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

            expect(x).to.equal(y);
        });

在这第一个只会执行

于 2019-02-28T13:44:11.923 回答
10

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

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

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

于 2016-11-30T05:29:18.420 回答
6

查看https://mochajs.org/#usage 我们看到简单地使用

摩卡测试/我的文件

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

于 2018-12-18T16:22:59.157 回答
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"

于 2020-07-08T04:16:37.650 回答
3

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

mocha -f 'my test x'

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

于 2021-06-29T12:16:34.977 回答
2

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

npm test -- test/sometest.js
于 2016-11-04T16:34:57.950 回答
0

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

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

在您的测试目录上键入命令:

npm run api:test
于 2019-01-18T16:25:52.653 回答