Как использовать Pact JS с Cypress? - PullRequest
1 голос
/ 02 марта 2020

Я хочу подружиться Pact JS и Cypress .

Дело в том, что интеграционные тесты Cypress выполняются внутри браузера, среда узла недоступна в нем, таким образом, я не могу использовать Pact объекты где-либо в тестах.

Через задачу Cypress

Тем не менее я могу реализовать задачу Cypress , и переместите весь код, связанный с кипарисами, в эту задачу и установите связь через другие задачи Таким образом, поток становится слишком сложным, он требует поддержки жизненного цикла объекта Pact в задаче и дублирования всех сообщений. Вот так:

кипарис / плагины / индекс. js:

const {Pact} = require("@pact-foundation/pact")
  module.exports = (on) => {
  on("task", {
    createPactServer() {
      return new Pact({
        consumer: "TodoApp",
        provider: "TodoService",
        port: 8501,
        // log: path.resolve(process.cwd(), "logs", "pact.log"),
        // dir: path.resolve(process.cwd(), "pacts"),
        logLevel: "info",
      })
    }
  })
}

кипарис / интеграция / тест. js:

describe("Login page", (): void => {
  it("should log in", (): void => {
    let a = cy.task('createPactServer', );
    // do rest
    // manage verify
    // handle errors from verify
    //  shutdown pact server
    // handle all other lifecycle events.
  });
});

Я бы хотел избежать этого! !!

Через кипарисовый маршрут

Также кипарис поставляется с маршрутом , который позволяет имитировать сеть и заглушки ответы. Интересно, есть ли способ их смешать, поэтому я бы даже не слушал порт с Pact-сервером. Я не нашел способа подумать, что я не слишком долго это расследовал. Есть также pact-web, который кажется мне только фиктивной частью без http-сервера, но нет никакой необходимости делать c при интеграции его с API. Также я обнаружил, что в pact используются файлы ruby, что, вероятно, делает невозможным использование без http-сервера в env-узлах, отличных от узлов.

Интересно, попытался ли бы в любом случае соединить их вместе и что было бы предпочтительный способ.

1 Ответ

0 голосов
/ 20 марта 2020

Почему вы хотите соединить кипарис и пакт? Меня использовали и раньше, и я думаю, что лучше избегать этой зависимости.

Одной рукой Вы можете использовать Cypress для тестов E2E, потому что Cypress предназначен для всего, что работает в браузере. Это означает, что вам не нужно обращаться непосредственно к сервисам, контроллерам и т. Д. c. С другой стороны, вы можете использовать Pact JS (с мокко) для контрактных тестов. Как вы должны знать, Pact придерживается подхода, основанного на контрактах с потребителями. Это означает, что вам нужно создать файл pact от потребителя, для этого вам нужно выполнить модульные тесты с контроллерами (или методом http-вызовов), а вы не можете сделать это с помощью Cypress.

...