Как перейти к реализации пользовательских команд в Cypress? - PullRequest
0 голосов
/ 21 марта 2019

Я использую пользовательские команды в Cypress, и он работает нормально.Я использую код Visual Studio в качестве редактора.Я искал, как позволить intelliSence распознавать пользовательские команды и обнаружил, что в https://github.com/cypress-io/cypress-example-todomvc#cypress-intellisense

я добавил файл cypress / index.d.ts:

/// <reference types="cypress" />
declare namespace Cypress {
interface Chainable<Subject> {
  /**
   * Do something
   * @example
   * cy.doSomething()
   */
  doSomething(): Chainable<any>
}}

теперь при нажатии на doSomething в spec-файле он открывает объявление в index.d.ts, есть ли способ позволить vscode открыть фактическую реализацию команды в файле support / commands.js?

1 Ответ

1 голос
/ 22 марта 2019

Чтобы ответить прямо, открытие / просмотр прямого объявления пользовательских команд не поддерживается (может быть, кто-то может исправить, если это поддерживает).Я обычно следую за группировкой пользовательских команд в отдельных файлах.Например,

Файл: cypress/support/sample_command.ts

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

import * as PageElements from "../resources/selectors.json";
import * as Pages from "../resources/urls.json";

let xml: XMLDocument
let data: HTMLCollection

Cypress.Commands.add(
  "getWorkflowXML",
  (wfPath: string): Cypress.Chainable<HTMLCollection> => {
    var url = Cypress.env("url") + wfPath;

    return cy.request({
      log: true,
      url: url,
      auth: {
        user: Cypress.env("userName"),
        pass: Cypress.env("password")
      }
    }).then(response => {
      expect(response)
        .property("status")
        .to.equal(200);
      xml = Cypress.$.parseXML(response.body);
      data = xml.getElementsByTagName("java");
      return data;
    });
  }
);

declare global {
  namespace Cypress {
    interface Chainable {
      /**
       * Get Workflow XML through XHR call
       * @memberof Cypress.Chainable
       * @param wfPath
       */
      getWorkflowXML: (wfPath: string) => Cypress.Chainable<HTMLCollection>;
    }
  }
}

Затем в файле cypress/support/index.js я бы импортировал командный файл:

import './sample_command'

Этот способ дает мнелучшая отслеживаемость, вместо объявления всех команд прямо под index.d.ts.

Ссылка:

  1. https://docs.cypress.io/api/cypress-api/custom-commands.html#Syntax
  2. https://github.com/cypress-io/add-cypress-custom-command-in-typescript
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...