Макет сетевых запросов в Cypress - PullRequest
4 голосов
/ 18 марта 2019

Я рвал на себе волосы уже целую вечность - и я надеюсь, что кто-нибудь может мне помочь:)

Я давно пытаюсь заблокировать сетевой запрос в Cypress.

commands.js

Cypress.Commands.add('login', (
    email = 'email',
    password = 'pass'
) => {
    cy.server();
    cy.visit('url');
    cy.get('input[name="username"').type(email);
    cy.get('form').submit();
    cy.get('input[name="password"').type(password);
    cy.get('form').submit();
});

mock.js

describe('mock', function() {
    it('user can login', function() {
        cy.login();
        cy.get('main[role="main"]');

        cy.route('GET',
            '**/getIncentives*',
            {info: {}, results: {}}
        ).as('oppty');

        cy.wait('@oppty');
    });
});

Запрос инструментов Chrome для разработчиков enter image description here

Сбой запроса Cypress enter image description here

Любая помощь здесь будет очень признательна - я схожу с ума!

Большое спасибо,
Олли

Ответы [ 2 ]

3 голосов
/ 22 марта 2019

Cypress найдет сетевой запрос только после того, как будет псевдонимом.Код в вашем вопросе указывал, что вы не выполняете действие, которое вызовет сетевой запрос:

        cy.route('GET',
            '**/getIncentives*',
            {info: {}, results: {}}
        ).as('oppty');

       // cypress expected something to cause a network request here

        cy.wait('@oppty');

Вы должны либо переместить вызов на route ранее в тесте, либо переместить код, который вызываетзапрос после звонка на route.

3 голосов
/ 18 марта 2019

В настоящее время Cypress cy.route может блокировать только сетевые запросы, использующие XHRs

Собственные элементы формы HTML не используют XMLHTTPRequest , поэтому вы не можете использовать cy.route для его заглушки.

Большинство людей не сталкиваются с этой проблемой, потому что использование собственных форм HTML не так распространено в наши дни

Edit:

Вы также waiting на маршруте, но на самом деле ничего не сделали в своем тесте. Ваш тест должен выглядеть примерно так:

  cy.route('GET',
      '**/getIncentives*',
      {info: {}, results: {}}
  ).as('oppty');

  // cypress code that would cause a network request.

  cy.wait('@oppty');

Также убедитесь, что запрос имеет тип: XHR: enter image description here

...