/// <reference types =“ cypress”>未在VS代码中启用智能感知

时间:2019-03-14 14:19:01

标签: intellisense cypress

首先,感谢您抽出宝贵的时间阅读本文章。

我会尽力而为,在使用JS时,试图获得Cypress的代码完成有一个荒谬的问题。我一直在尝试我能找到的所有文档,但是我发现这些文档不够全面。

任何人都可以解释

4 个答案:

答案 0 :(得分:1)

这些都不适合我,最终Intellis给我的是根据Cypress docs向Cypress文件夹中添加一个tsconfig.json文件:

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

答案 1 :(得分:1)

我刚刚添加

  "compilerOptions": {
    "types": ["cypress"]
  }

到cypress根目录下的tsconfig.json文件中的对象。然后,我从命令面板中选择“重新启动TS服务器”,然后为我整理了一切。

答案 2 :(得分:0)

这是因为您通过.exe安装了赛普拉斯,这不是建议的赛普拉斯安装方式。

只有通过npm安装cypress时,才会安装cypress类型定义

为了让VSCode查找类型定义, 您应该将cypress安装为项目的开发依赖项(根据文档,首选安装形式):

npm i -D cypress

答案 3 :(得分:-1)

如何使Cypress打字在vscode中工作

我也无法使Cypress intellisense正常工作。我获得智能感知的方法令人费解,并且可能是错误的,但我没有使其以任何其他方式起作用。

  1. 使用以下类型的语法在我的项目的根目录中添加一个cypress.d.ts文件。这声明了cy类型,因此您可以自动完成大多数赛普拉斯的东西:
declare var Cypress: any;

interface CypressElement {
  type(value: string, options?: any): CypressElement,
  clear(options?: {force: boolean}): CypressElement,
  click(options?: {force: boolean}): CypressElement,
  should(...args: any): CypressElement,
  selectValue(option: number, optionsClass: string):CypressElement,
  fillInput(value: string):CypressElement,
  eq(index: number): CypressElement,
  contains(value: any): CypressElement,
  within(...args: any): any,
  trigger(...args: any): any;
  first(): CypressElement;
}

declare var cy: {
  get(select: any): CypressElement;
  window(): Promise<any>;
  visit(path: any): void;
  request(options: any): Promise<any>;
  wait(time: string | number): any;
  server(): any;
  route(...options: any): any;
  log(...messages: string[]): any;
  contains(selector: string, value: any): any;
  stub(...args: any): any;
  on(event: string, callback: any): any;
  url(): CypressElement;
};

(以这种方式手动声明赛普拉斯的打字充其量似乎有些陌生。但是,尝试使用本机赛普拉斯会产生很多问题)

  1. 通过以下方式在tsconf.json编译器选项中引用该文件:

    “ typeRoots”:[“ cypress.d.ts”],

即使cypress代码是用javaScript编写的,这也只启用了Cypress的智能感知功能,因为vscode的智能感知引擎非常依赖打字稿。

我猜因为您没有使用typeScript,所以可能需要在根目录添加一个非常简单的tsconfig文件(以便您的编辑器可以读取其配置),例如:

{
    "compilerOptions": {
        "typeRoots": ["cypress.d.ts"],
        "target": "es5",
        "module": "commonjs",
        "lib": [
            "es6"
        ],
        "declaration": true,
        "removeComments": false,
        "stripInternal": true,
        // since 2.3
        // "strict": true,
        "alwaysStrict": true,
        "noImplicitAny": true,
        "noImplicitThis": true,
        "strictNullChecks": true
    },
    "files": [
        "./index.ts"
    ]
}

我不知道,也许您可​​以指示编辑者将cypress.d.ts加载为typeRoots

此后,您应该对cy变量和来自cy.get()的对象(在该类型定义中以上称为CypressElement)具有智能感知。

关于此的一个重要警告是,每当您使用赛普拉斯的新功能时,都需要将其类型手动添加到cypress.d.ts中以获取智能。