Обработчик кипариса onRequest завершается ошибкой, если таковой имеется. метод, используемый внутри - PullRequest
0 голосов
/ 07 ноября 2018

По сути, моя задача следующая: когда мое приложение запускает исходящий запрос xhr, я хочу сделать некоторые утверждения для полезной нагрузки запроса и продолжить выполнение других утверждений, как только запрос будет выполнен. Поэтому я использовал опцию onRequest в методе cy.route, которая позволяет вам иметь доступ к исходящему запросу xhr. Мой исходный код выглядел так:

cy.server();
cy.route({
  method:'POST',
  url:'/api/v3/table-metas/**',
  onRequest(xhr) {
    console.log('==========BEFORE========');
    cy.wrap(xhr).
    its('request').
    its('body').
    its('embedded').
    should('to.deep.equal',
      [
        {
          "attributes": {
            "name": "Test Name"
          },
          "type": "test_type"
        }
      ]
    ).debug();
    console.log('=============AFTER===========');
 }
}).as('getTableMetas');

Но этот код заставляет мое приложение думать, что запрос не выполнен, и в кипарисовом журнале показывалось, что запрос ожидал до тех пор, пока он не завершился с истечением времени ожидания. Тогда я решил снять свое утверждение, и все работает отлично!:

cy.server();
cy.route({
  method:'POST',
  url:'/api/v3/table-metas/**',
  onRequest(xhr) {
    console.log('==========BEFORE========');
    console.log('=============AFTER===========');
 }
}).as('getTableMetas');

Таким образом, я решил, что проблема в моем коде утверждения, и провел некоторое тестирование с другими методами cy, но кажется, что любой метод cy. приводит к точно такой же ошибке:

cy.server();
cy.route({
  method:'POST',
  url:'/api/v3/table-metas/**',
  onRequest(xhr) {
    console.log('==========BEFORE========');
    cy.log('AAAAAAAAAAAA');
    console.log('=============AFTER===========');
 }
}).as('getTableMetas');

Вот скриншот Cypress Log для последней части кода: enter image description here

Что я здесь не так делаю? Если это спроектированное поведение кипариса, то как мне утверждать тело исходящего запроса?

Буду благодарен за любую помощь

1 Ответ

0 голосов
/ 08 ноября 2018

Когда задан псевдоним аргумента:

cy.wait () возвращает объект, содержащий свойства HTTP-запроса и ответа XHR. Источник

Получатель свойства может быть привязан к полученному объекту от вызова метода ожидания. 1010 * например, *

it('verifies request body', () => {
  cy.server();
  cy.route({
    method:'POST',
    url:'/api/v3/table-metas/**',
    onRequest(xhr) {
      console.log('==========BEFORE========');
      console.log('=============AFTER===========');
   }
  }).as('getTableMetas');

  // do some action that makes a request to the intercepted request

  cy.waits('@getTableMetas')
    .its('request.body.embedded')
    .should('to.deep.equal', [
      {
        "attributes": {
          "name": "Test Name"
        },
        "type": "test_type"
      }
    ]).debug();
});

Обновление

onRequest выполняется как обратный вызов, вызов cy.wraps создает обещание во время выполнения, которое никогда не разрешается.

Я предлагаю вместо обычных обратных вызовов chai использовать onRequest, поскольку они синхронны.

expect(xhr.request.body.embedded).to.deep.equal([
        {
          "attributes": {
            "name": "Test Name"
          },
          "type": "test_type"
        }
      ]) 
...