Mocha 在 WebStorm 11 中的描述 "require() is missing"

Mocha's describe "require() is missing" in WebStorm 11

我刚刚安装了 WebStorm 11 并创建了一个新项目,但是 WebStorm 说 describe 方法需要 require()

我添加了 definitely-types mocha 库,范围是测试目录(此文件所在的目录)。

这是 v.11 中引入的新检查 - 它检查代码中使用的模块是否通过 require() 语句引用。事实上,这种检查对于 mocha 测试来说是多余的('describe' 和其他东西不需要明确要求,因为它们已被 Mocha 添加到全局范围)。您可以为 'describe'、'it' 等禁用或抑制此检查(参见 https://www.jetbrains.com/webstorm/help/suppressing-inspections.html)。 另一种选择:创建一个排除规范文件的自定义范围 (Settings/Appearance & Behavior/Scopes),然后选择此范围进行 'Missing require() statement' 检查 (Settings/Editor/Inspections/Javascript/Node.js).

相关工单:WEB-18768

编辑:如评论中所述,此问题中解决的实际问题实际上是 IntelliJ 15 / WebStorm 11 中的错误(参见 https://youtrack.jetbrains.com/issue/WEB-18768)。我将答案留在下面,因为很多人在搜索提供的解决方案时来到这里。

接受的答案是解决问题的大锤方法。更好的解决方案是为测试目录启用 mocha-DefinitelyTyped 库。这不仅会消除错误检查,还会提供更好的语法突出显示。

来自检查的描述:

When using libraries that define their own global symbols outside their visible JavaScript code (e.g. describe() in Mocha), it is recommended that you add the corresponding TypeScript type definition file as a JavaScript library in Preferences | Languages & Frameworks | JavaScript | Libraries.

导航到上面提到的首选项部分,“首选项 |语言与框架 | JavaScript | Libraries',并检查 mocha-DefinitelyTyped 库是否在列表中。

如果 @types/mocha(以前被命名为 mocha-DefinitelyTyped)不在列表中,请单击 Download… 按钮,在“TypeScript 社区存根”部分找到“mocha”, select 它,然后单击下载并安装:

该库在列表中仅命名为 mocha,但在导入后将转换为 @types/mocha(在 2019 年初之前,它将转换为 mocha-DefinitelyTyped)。

安装 mocha-DefinitelyTyped 后,取消选中其启用复选框。完全检查它会在全球范围内启用它,即使在测试之外,这是不准确的。相反,我们将管理其范围,使其仅在您的测试目录中启用。单击 Manage Scopes… 按钮,找到您的测试目录,单击库列,然后 select ‘mocha-DefinitelyTyped’ 条目。请参阅下面的屏幕截图。

目前 Webstorm 2017.3 中存在一个错误,该错误会阻止通过“首选项”安装 Javascript 库。语言与框架 | JavaScript |图书馆 |下载并安装’方法。

这里正在跟踪,最新的 EAP(抢先体验预览版)(撰写本文时为 Webstorm 2017.3.2)修复了该问题。 https://youtrack.jetbrains.com/oauth?state=%2Fissue%2FWEB-29725

我为此用头撞墙好几个小时,希望这对其他人有帮助。

如果您已经全局安装了 mocha,但它仍然无法正常工作,请尝试删除所有 Run/Debug 配置。

它将更新 npm runner,希望它能解决问题。

有一个非常简单的解决方法可以为您和项目中的所有其他开发人员解决问题:

在文件顶部添加以下行:

const { describe, it, before, beforeEach, afterEach, after } = require('mocha');