如何自动检查 Mocha 规格中意外留下'.only'呼叫?



在推送规范更改之前,我偶尔会忘记从我的 Mocha 规范中删除.only调用。这样做显然会影响测试覆盖率,这需要解决故障。我想在推送更改之前捕获这些内容,理想情况下,作为 ESLint 检查过程的一部分,并且工作量最小。

您正在寻找mocha/no-exclusive-tests规则,这是eslint-plugin-mocha插件的一部分。 如果找到任何describe.onlyit.only,它将失败。 非常有用!

从文档中:

此插件需要 ESLint 4.0.0 或更高版本。

npm install --save-dev eslint-plugin-mocha

然后在您的 eslint 配置中添加对此插件和所选规则的引用:

{
  "plugins": [
    "mocha"
  ],
  "rules": {
    "mocha/no-exclusive-tests": "error"
  }
}

如果您也想防止it.skipxit也提交,还有一个mocha/no-skipped-tests。 但是,我发现.skip有时是有效的,所以我发现最好只是防止.only

该插件还有大量其他有用的检查,因此请务必阅读他们的文档!

执行 mocha 时要传递一个--forbid-only参数,这将使测试失败。

你也有--forbid-pending.

这是来自官方文档:

-

-仅禁止导致测试标记为仅未通过套件

-

-禁止挂起导致挂起的测试和标记为跳过的测试使套件失败

另一个这样做的软件包是eslint-plugin-no-only-tests。

或者,现在可以通过遵循内置的 ESLint 规则来完成此操作,但它们也会将回调的整个函数体突出显示为错误:

"no-restricted-syntax": [
  "error",
  {
    "selector": "CallExpression[callee.object.type='Identifier'][callee.object.name='it'][callee.property.type='Identifier'][callee.property.name='only']",
    "message": "Do not commit it.only. Use it instead."
  },
  {
    "selector": "CallExpression[callee.object.type='Identifier'][callee.object.name='describe'][callee.property.type='Identifier'][callee.property.name='only']",
    "message": "Do not commit describe.only. Use describe instead."
  }
]

对于排除fdescribefit,可以使用以下内容:

"no-restricted-globals": [
  "error",
  {
    "name": "fdescribe",
    "message": "Do not commit fdescribe. Use describe instead."
  },
  {
    "name": "fit",
    "message": "Do not commit fit. Use it instead."
  },
]

我的解决方案是使用带有 grep 命令的简单 bash 脚本,添加到package.json脚本部分,如下所示:

"scripts": {
  "lint:only": "RESULT="$(grep -rHn '[.]only\|[.]skip' spec/ --color=always)"; if [ -n "$RESULT" ]; then printf "Oops! You left a few things in your specs! nn${RESULT}nn"; fi",
  "lint": "eslint --ext js src config scripts bin config server; yarn lint:only"
  ...
}

简而言之,这会检查spec/目录中是否有任何与.only.skip匹配的内容,如果发现任何违规行为,则输出文件名 + 行。为了清晰起见,添加了颜色,并且脚本作为 ESLint 和 Yarn 棉绒的一部分运行。

最新更新