【问题标题】:Mocha's describe "require() is missing" in WebStorm 11Mocha 在 WebStorm 11 中描述“require() is missing”
【发布时间】:2015-11-08 22:52:13
【问题描述】:

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

我已经添加了确定类型 mocha 库,范围是测试目录(该文件所在的目录)。

【问题讨论】:

    标签: javascript node.js mocha.js webstorm


    【解决方案1】:

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

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

    来自检查的描述:

    使用在外部定义自己的全局符号的库时 它们可见的 JavaScript 代码(例如 Mocha 中的 describe()),它是 建议你添加对应的 TypeScript 类型定义 在首选项中将文件作为 JavaScript 库 |语言和框架 | JavaScript |图书馆。

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

    如果@types/mocha(以前叫mocha-DefinitelyTyped)不在列表中,点击Download…按钮,在'TypeScript community stubs'部分找到'mocha',选择它,然后点击Download and Install :

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

    一旦你有 mocha-DefinitelyTyped,取消选中它的 Enabled 复选框。让它完全检查将在全球范围内启用它,即使在测试之外也是如此,这是不准确的。相反,我们将管理其范围,使其仅在您的测试目录中启用。单击Manage Scopes… 按钮,找到您的测试目录,单击Library 列,然后选择“mocha-DefinitelyTyped”条目。请参阅下面的屏幕截图。

    【讨论】:

    • 这太棒了。有没有一种工具可以将这样的依赖类型下载到全局文件夹中?我已经设置了一个全局 typings 目录,我现在从 WebStorm 引用它,但是每个依赖项需要 1-2 分钟来设置。
    • @Brian,我不这么认为。 IntelliJ 将它们下载到自己的缓存中,但按项目管理它们。
    • @BamaPookie 我目前在项目外部的目录中有常见的类型。我知道我需要在每个项目中手动引用该目录。编写一个工具来检查你的依赖项,检查它们的类型是否存在于你的类型目录中,然后下载那些不存在的,这可能是一个非常酷的项目。我看了看,周围没有类似的东西。它必须是一个可以为每个项目运行的全局模块。
    • @BamaPookie - 显然,vs 代码团队有同样的想法,结果是灾难性的code.visualstudio.com/updates/v1_7#_171-recovery-build
    • 当谈到最初记录的问题时,这个答案是完全错误的,因为在 WebStorm 11 中,尽管安装了 Mocha 存根,但仍然报告错误。见问题描述:I've added the definitely-types mocha library and the scope is for the test directory。通过修复链接到正确答案的youtrack.jetbrains.com/issue/WEB-18768,问题在 2016.x 中得到解决
    【解决方案2】:

    这是第 11 版中引入的新检查 - 它检查代码中使用的模块是否通过 require() 语句引用。实际上,这种检查对于 mocha 测试是多余的(“描述”和其他东西不需要明确要求,因为它们是由 Mocha 添加到全局范围的)。您可以禁用此检查或将其禁止用于“描述”、“它”等(请参阅https://www.jetbrains.com/webstorm/help/suppressing-inspections.html)。 另一种选择:创建一个排除您的规范文件的自定义范围(设置/外观和行为/范围),然后选择此范围进行“缺少 require() 语句”检查(设置/编辑器/检查/Javascript/Node.js)。

    相关票证:WEB-18768

    【讨论】:

    • "您可以禁用此检查,也可以将其抑制为 'describe'、'it' 等。" - 请详细说明。
    • jetbrains.com/phpstorm/help/… - 所以首选项 -> 编辑器 -> 检查 -> JavaScript -> Node.js -> 缺少 require() 语句然后我如何添加任何抑制,如“描述”、“它”等等?
    • 我可以让它工作的唯一方法是使用自定义范围,在我的情况下,选择我的测试文件夹并递归选择包含,然后将该范围与给定的检查规则相关联(并选择切换该范围的规则完全禁止)。我没有找到任何方法巧妙地调整检查规则本身以忽略项目黑名单,例如。描述,它等可以被认为是全球性的。如果存在这种方法,请有人在这里发表评论(使用 Webstorm 11.0.3)
    • 使检查忽略某些文件的唯一方法是设置范围 - 请参阅上面的答案
    • 这是我不敢苟同的地方——你的回答,就目前的情况而言,回避了这是可能的事实。引用答案-“您可以禁用此检查或将其抑制为'描述','它'等。另一个选项:创建..”-所以请在陈述“另一个选项”之前告诉我您的意思。我如何为“描述”、“它”抑制它。使用范围正在接受您的“另一种选择”建议。谢谢。
    【解决方案3】:

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

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

    我在墙上撞了好几个小时,希望这对其他人有所帮助。

    【讨论】:

      【解决方案4】:

      如果您已经在全局范围内安装了 mocha,但仍然无法使用,请尝试删除所有运行/调试配置。

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

      【讨论】:

      • 听起来像是评论而不是答案。
      • 删除所有运行/调试配置并不是一个好的解决方案。
      • 但是我花了很多时间来解决这个问题,没有一个答案对我有帮助。我自己找到了这个解决方案,我只是分享我的经验。如果它没有帮助到你——并不意味着它不会帮助别人。
      【解决方案5】:

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

      在文件顶部添加以下行:

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

      【讨论】:

      • 这与 WebStorm 11(近五年前)有关。当时这不是一个选项,但 WebStorm 确实有将其他文件标记为库的方法。
      猜你喜欢
      • 2021-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-22
      • 1970-01-01
      • 2016-06-28
      • 2019-08-10
      相关资源
      最近更新 更多