【问题标题】:Lost intellisense for cypress in visual studio code在 Visual Studio 代码中丢失了 cypress 的智能感知
【发布时间】:2018-09-20 22:31:30
【问题描述】:

我遇到了一个非常奇怪的问题。

我创建了一个非常基础和简单的cypress项目,只有示例测试用例并且没有任何其他devDependencies只有cypress。

当我第一次在 Visual Studio 代码中打开这个项目时,鼠标悬停在一个方法上后,我可以看到一个带有一些签名帮助的弹出窗口,然后右键单击选择“转到定义”的方法,我可以打开该文件。

我写了一个代码“cy.”后发生了奇怪的事情,它应该给我智能代码建议,但是没有任何建议并且鼠标悬停到任何方法签名帮助消失并右键单击方法选择“转到”定义”我得到“没有找到‘XXX’的定义”

问了很多开发者,没有人能回答,请大家帮忙,谢谢!

【问题讨论】:

  • 顺便说一下,智能代码建议在 WebStorm 中为同一个项目工作正常。

标签: javascript visual-studio-code cypress


【解决方案1】:

请检查您的文件顶部是否有triple-slash directive,例如

/// <reference types="Cypress" />

如果是这种情况,请尝试在您的 cypress 文件夹中添加一个 tsconfig.json。从 cypress 文档中,具有以下配置的 tsconfig.json 应该可以使智能代码完成工作。

{
  "compilerOptions": {
    "allowJs": true,
    "baseUrl": "../node_modules",
    "types": [
      "cypress"
    ]
  },
  "include": [
    "**/*.*"
  ]
}

【讨论】:

  • 是的,我有“/// ”和“tsconfig.json”(你可以在我的截图中看到它们),奇怪的是我得到了“签名帮助”第一次,但输入“。”后就丢失了。在“cy”之后。
  • 如果文件顶部缺少“/// 参考”标签。我加了之后,intellisense又出来了。
  • 在 compilerOptions 上添加了 "noEmit": true 以避免覆盖消息错误,并重新加载了 VSCode。不需要“/// ”,只需要 tsconfig.json。
  • 这对我来说很好,但我收到了这个错误can't write file x because it would overwrite input file 知道如何解决这个错误吗?
【解决方案2】:

您在 9 月 23 日的评论中描述了相同的行为。我意识到这是由我的自定义 cypress 命令引起的。在链接我的自定义命令之前,我会得到代码完成,但不是之后。

为了解决这个问题,我在cypress/support 中添加了一个index.d.ts 文件,内容如下:

declare namespace Cypress {
  interface Chainable<Subject> {
    /**
     * Log in via UI
     * @example
     * cy.login(username: string, password: string)
     */
    login(): Chainable<any>
    /**
     * Log in via API
     * @example
     * cy.apiLogin()
     */
    apiLogin(): Chainable<any>

    /**
     * Wait for viewer to load
     * @example
     *  cy.waitForFirstLoad()
     */
    waitForFirstLoad(): Chainable<any>

    /**
     * Log out
     * @example
     *  cy.logout()
     */
    logout(): Chainable<any>
  }
}

我还修改了cypress/tsconfig.json如下:

{
    "compilerOptions": {
        "allowJs": true,
        "baseUrl": "../node_modules",
        "types": ["cypress", "../support"]
    },
    "include": ["**/*.*"]
}

希望对你有帮助

【讨论】:

    【解决方案3】:

    您可以覆盖赛普拉斯配置文件,以使“智能代码完成”功能在整个项目中都可用。

    为此,请转到 projectName/cypress.json 并添加以下内容:

    {
        "$schema": "https://on.cypress.io/cypress.schema.json"
    }
    

    参考:Cypress Documentation

    【讨论】:

    • 我认为这只是为了cypress.json;它只会自动完成并描述该文件中的 JSON 道具。
    【解决方案4】:

    经过数小时的艰苦调查,我发现如果您不想在每个文件的顶部包含三斜杠指令,请在您的 index.d.ts 文件中执行此操作:

    declare global {
      namespace Cypress {
        interface Chainable<Subject> {
          /**
           * Should login
           * @param user
           * @example cy.login()
           */
          login(user?: string): Chainable<any>;
        }
      }
    }
    

    这是修复我的 VS Code IntelliSense 的原因,因此我的自定义命令会自动完成,并且将鼠标悬停在它们上会显示 JSDocs。

    【讨论】:

      【解决方案5】:

      只需将以下代码添加到您的 tsconfig.json 文件中。

      "types": [
            "cypress"
          ]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-27
        • 1970-01-01
        • 2020-03-01
        • 2016-10-02
        • 2016-12-02
        • 2020-06-26
        • 2021-01-07
        • 2016-03-20
        相关资源
        最近更新 更多