Дождитесь определенного ответа c при опросе XHR с Cypress - PullRequest
0 голосов
/ 20 марта 2020

У меня есть кипарис c, с помощью которого я хочу протестировать функцию на своем сайте, которая опрашивает сторонний API, пока не получит правильный ответ, а затем покажет пользователю дополнительную информацию, чтобы продолжить работу с этой функцией.

Я начинаю свою специализацию c с

cy.server();
cy.route('GET', '**/that-other-api/**').as('otherApi');

Я знаю, что эта часть работает. Маршрут указан в верхней части теста Cypress GUI, и мой псевдоним otherApi присоединен к запросам XHR, когда они перечислены в списке команд при выполнении.

Когда пользователь (или мой test) нажимает кнопку, сайт начнет опрос этой конечной точки. Когда я получаю status: success в ответе, пользователю (или моему тесту) предоставляется заполненный выпадающий список опций, и он может продолжить.

Как я могу заставить Cypress ждать, пока я не получу этот конкретный c ответ на запрос XHR (или достигает тайм-аута кипариса) и затем продолжить?

Документация сетевого запроса не объясняет, возможно ли это или нет. Я попытался

cy.wait('@billectaAccounts').should('have.property', 'response.body.status', 'success');

и просто посмотреть, работает ли что-то

cy.wait('@billectaAccounts').should('have.property', 'status', 201);

, которые оба выдают ошибку:

InvalidStateError: Не удалось прочитать ' Свойство responseText 'из «XMLHttpRequest»: значение доступно только в том случае, если «responseType» объекта является «» или «text» (было «json»).

Регистрация ответа с

cy.wait('@billectaAccounts').then(console.log);

регистрирует ответ и показывает, что моя переменная состояния есть, но имеет значение pending, поскольку она присутствует только в первом запросе.

{
  "xhr": {
    "method": "GET",
    "url": "https://myapi/longToken",
    "id": "xhr193"
  },
  "id": "xhr193",
  "url": "https://myapi/longToken",
  "method": "GET",
  "status": 200,
  "statusMessage": "200 (OK)",
  "request": {
    "headers": {
      "Accept": "application/json, text/plain, */*"
    },
    "body": null
  },
  "response": {
    "headers": {
      "cache-control": "max-age=0, private, must-revalidate",
      "connection": "close",
      "content-type": "application/json; charset=utf-8",
      "date": "Tue, 24 Mar 2020 08:32:09 GMT",
      "etag": "W/\"f0d6999f3be78c3dc8eab419745ec489\"",
      "referrer-policy": "strict-origin-when-cross-origin",
      "server": "Cowboy",
      "vary": "Origin",
      "via": "1.1 vegur",
      "x-content-type-options": "nosniff",
      "x-download-options": "noopen",
      "x-frame-options": "SAMEORIGIN",
      "x-permitted-cross-domain-policies": "none",
      "x-request-id": "id",
      "x-runtime": "0.006788",
      "x-xss-protection": "1; mode=block"
    },
    "body": {
      "id": 721,
      "public_id": "longTokenId",
      "bank": "bank-id",
      "ssn": "ssn-number",
      "status": "pending",
      "created_at": "2020-03-24T09:32:05.362+01:00",
      "updated_at": "2020-03-24T09:32:06.028+01:00",
      "account_numbers": [],
      "token": "pollingToken"
    }
  },
  "duration": 230
}

Я бы предпочел не заглушать ответ, Приятно, что у этого API есть сквозное тестирование.

Любая помощь приветствуется!

...