/// <reference types = "cypress" /> не включает intellisense в коде VS - PullRequest
3 голосов
/ 14 марта 2019

Прежде всего, спасибо, что нашли время прочитать это.

Я остановлюсь в погоне, у меня возникла нелепая проблема, пытаясь получить завершение кода для Cypress, пока я использую JS. Я пытался проследить каждую часть документации, которую смог найти, но я не нахожу ее достаточно полной.

Может кто-нибудь объяснить

Ответы [ 2 ]

0 голосов
/ 17 марта 2019

Это потому, что вы установили Cypress через .exe, что не является рекомендуемым способом установки Cypress.

Определения типа кипариса устанавливаются только при установке кипариса через npm

Чтобы VSCode мог найти определения типов, Вы должны установить Cypress в зависимости от вашего проекта (предпочтительная форма установки в соответствии с документацией):

npm i -D cypress
0 голосов
/ 14 марта 2019

Как заставить Cypress печатать в vscode

У меня тоже были проблемы с получением Cypress intellisense.Мой способ получения intellisense извилистый и, вероятно, неправильный, но я не смог заставить его работать каким-либо другим способом.

  1. добавить файл cypress.d.ts в корень моего проекта со следующими типамисинтаксис.Это объявляет тип cy, так что вы получаете автозаполнение для большинства материалов Cypress:
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;
};

(Объявлять Cypress вручную таким способом кажется в лучшем случае чуждым. Однако при попытке использовать сгенерированные собственныемного проблем)

Ссылка на этот файл в параметрах компилятора tsconf.json:

"typeRoots": ["cypress.d.ts"],

Это просто позволяет intellisense для Cypress, даже если код кипариса написан на javaScript, поскольку vscode полагается на машинописание для своего механизма intellisense.

Поскольку вы не используете 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, я полагаюне знаю.

После этого у вас должен быть intellisense для вашей переменной cy и для объектов, полученных из cy.get() (которые выше называются CypressElement в определении этого типа).

Одно большое предостережение по этому поводу заключается в том, что всякий раз, когда вы используете новую функцию Cypress, вам нужно вручную добавить ее тип к cypress.d.ts, чтобы получить значение intellisense.

...