如何使用 Mocha 运行单个测试?
Posted
技术标签:
【中文标题】如何使用 Mocha 运行单个测试?【英文标题】:How to run a single test with Mocha? 【发布时间】:2012-06-05 14:49:26 【问题描述】:我使用 Mocha 来测试我的 javascript 内容。我的测试文件包含 5 个测试。是否可以运行特定测试(或一组测试)而不是文件中的所有测试?
【问题讨论】:
【参考方案1】:尝试使用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'
运行单个测试。请注意,此 greps 跨越所有 describe(name, fn)
和 it(name, fn)
调用的名称。
考虑使用嵌套的describe()
调用命名空间,以便于定位和选择特定集合。
【讨论】:
谢谢!我的印象是--grep
仅从 @
标签中过滤出来。
以编程方式使用 Mocha 时(例如从 Grunt 中),有一个问题:grep 选项需要是 'RegExp()' 对象。如果是字符串,会被转义。
这是唯一对我有用的解决方案。在命令行 (mocha some/test.js
) 上指定文件根本不起作用。谢谢!
有什么方法可以避免同时运行包含logs a
子字符串的logs a bcd
?正则表达式^$
不适用于 0.10.2。
谢谢。如果我没有将目录指定为 mocha -g 'logs a' 会出现一些错误。【参考方案2】:
根据您的使用模式,您可能只想使用 only。我们使用 TDD 风格;它看起来像这样:
test.only('Date part of valid Partition Key', function (done)
//...
只有这个测试将从所有文件/套件中运行。
【讨论】:
BDD 的工作方式相同。当您进行单个测试时,这非常有用。它也可以在套件/描述级别使用 使用 chai 并期望语法为it.only
。
这个答案更好,因为当从业力等内部使用摩卡时它也可以工作。
it.only
不能与mocha-testdata 的given
一起使用。以后很容易忘记将其删除。
eslint-plugin-mocha
有一个规则 no-exclusive-tests
,如果你忘记删除 .only
,它会抓住你。【参考方案3】:
如果您使用 npm test
(使用 package.json 脚本),请使用额外的 --
将参数传递给 mocha
例如npm test -- --grep "my second test"
编辑:看起来--grep
可能有点挑剔(可能取决于其他参数)。你可以:
修改package.json:
"test:mocha": "mocha --grep \"<DealsList />\" .",
或者使用--bail
,这似乎不那么挑剔
npm test -- --bail
【讨论】:
为我工作。谢谢:) @Andy--grep
可能有点麻烦 - 尝试在 npm 脚本条目中将其放在 mocha 之后。否则 npm test -- --bail
可用于在第一次失败测试后退出
在--grep
之前传递额外的破折号拯救了我的一天!非常感谢。 PS。我在 Windows 上,运行 npm test -- --grep @tag
【参考方案4】:
不确定为什么在使用 npm 测试时 grep 方法对我不起作用。这虽然有效。由于某种原因,我还需要指定测试文件夹。
npm test -- test/sometest.js
【讨论】:
【参考方案5】:您好,以上解决方案对我不起作用。 运行单个测试的另一种方式是
mocha test/cartcheckout/checkout.js -g 'Test Name Goes here'
这有助于从单个文件和特定名称运行测试用例。
【讨论】:
使用对-g
具有足够选择性的表达式,您无需指定文件名。如果你不能编写一个足够有选择性的表达式,那意味着你没有正确命名你的测试。【参考方案6】:
您可以通过多种方式做到这一点。
如果您只想从整个测试用例列表中运行一个测试,那么您可以在测试用例之前写only。
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' 是文件路径。
【讨论】:
it.only()
语法真的很漂亮,尤其是如果您不想每次都修改您的package.json
(即,当单元测试运行器是"scripts"
下的别名条目时)更改测试用例。更多上下文:medium.com/@cnadeau_/…【参考方案7】:
运行单个测试——按文件名——
实际上,如果您从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 文件中的各种开关(以 --
开头),但您 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",
"test-single-watch": "mocha -R list -w",
用法:
> npm run test
分别
> npm run test-single -- test/ES6.self-test.spec.js
mind the --
将后面的任何文本链接到npm
脚本
【讨论】:
$1 在我的设置中不需要,相反,它会导致如下警告:Warning: Could not find any test files matching pattern: $1
【参考方案8】:
调查https://mochajs.org/#usage 我们看到,只需使用
摩卡测试/我的文件
会起作用。您可以省略末尾的“.js”。
【讨论】:
【参考方案9】:将所有测试合并到一个 test.js 文件中,并将您的包 json 添加脚本为:
"scripts":
"api:test": "node_modules/.bin/mocha --timeout 10000 --recursive api_test/"
,
在你的测试目录输入命令:
npm run api:test
【讨论】:
【参考方案10】:你可以试试“it.only”
it.only('Test one ', () =>
expect(x).to.equal(y);
);
it('Test two ', () =>
expect(x).to.equal(y);
);
这里只有第一个会执行
【讨论】:
如果在 CI / 构建服务器上没有通过--forbid-only
执行测试,则很危险。 .only
倾向于潜入主分支并使其他测试静音,因为它们将不再执行。我开始想到更改代码以运行不同测试的工作流程是一种反特性。测试运行者应该确定应该执行哪些测试(也称为标记测试)而不是开发人员。
我用它来测试我本地的一项功能,注意:不要将带有it.only
的代码提交给repo【参考方案11】:
只需在“描述”、“它”或“上下文”之前使用 .only。我使用“$npm run test:unit”运行,它只执行带有 .only 的单元。
describe.only('get success', function()
// ...
);
it.only('should return 1', function()
// ...
);
【讨论】:
在浏览答案时切入正题。有用。好一个:) 完美、快速且易于实施【参考方案12】:对于那些希望运行单个文件但他们无法使其工作的人,对我有用的是我需要将我的测试用例包装在如下描述套件中,然后使用描述标题,例如“我的测试描述”作为模式。
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"
【讨论】:
【参考方案13】:使用Mocha's --fgrep
(或只是-f)可以选择包含字符串的测试,例如:
mocha -f 'my test x'
将运行所有包含it()
、describe()
或context()
块中的my test x
的测试。
【讨论】:
以上是关于如何使用 Mocha 运行单个测试?的主要内容,如果未能解决你的问题,请参考以下文章
您如何安装和运行 Mocha,Node.js 测试模块?安装后获取“mocha:找不到命令”