Spec-Zone.ru › Cypress

сервер

Запустите сервер, чтобы начать маршрутизацию ответов для cy.route() и изменить поведение сетевых запросов.

⚠️ cy.server() и cy.route() устарели в Cypress 6.0.0. В будущей версии поддержка cy.server() и cy.route() будет удалена. Вместо этого используйте cy.intercept(). См. наше руководство по миграции cy.route() к cy.intercept()

⚠️ cy.route() и cy.server() поддерживают только перехват XMLHttpRequests. Запросы, использующие Fetch API и другие типы сетевых запросов, такие как загрузки страниц и <script> теги, не будут перехвачены cy.route() и cy.server().

Для поддержки запросов, использующих Fetch API, можно воспользоваться одним из следующих решений:

  • Используйте cy.intercept(), которое поддерживает запросы, использующие Fetch API и другие типы сетевых запросов, такие как загрузки страниц. См. cy.intercept().
  • Подключите window.fetch для отслеживания и подстановки запросов, использующих cy.route() и cy.server(), включив experimentalFetchPolyfill. См. #95 для получения дополнительных сведений и временных решений.

Синтаксис

cy.server()
cy.server(options)

Использование

Правильное использование

cy.server()

Аргументы

options (Объект)

Передайте объект options, чтобы изменить поведение по умолчанию cy.server(). Эти параметры используются для двух целей:

  • В качестве значений по умолчанию, которые объединяются с cy.route().
  • В качестве конфигурации поведения для всех запросов.

Следующие параметры объединяются в значения по умолчанию для cy.route()

Параметр Значение по умолчанию Описание
delay 0 задержка для подставленных ответов (в мс)
headers null заголовки ответа для подставленных маршрутов
method "GET" метод для соответствия запросам
onAbort undefined функция обратного вызова, которая срабатывает всякий раз, когда XHR прерывается
onRequest undefined функция обратного вызова, когда отправляется запрос
onResponse undefined функция обратного вызова, когда возвращается ответ
response null тело ответа при подстановке маршрутов
status 200 код состояния ответа при подстановке маршрутов

Следующие параметры управляют поведением сервера, влияя на все запросы

Параметр Значение по умолчанию Описание
enable true передача false для отключения существующих подставленных маршрутов
force404 false вынужденная отправка XHR со статусом 404, когда XHR не соответствуют существующему маршруту
onAnyAbort undefined функция обратного вызова, вызываемая при прерывании любого XHR
onAnyRequest undefined функция обратного вызова, вызываемая при отправке любого запроса
onAnyResponse undefined функция обратного вызова, вызываемая при возвращении любого ответа
urlMatchingOptions { matchBase: true } Значения по умолчанию, передаваемые в minimatch при использовании строк шаблонов для сопоставления URL-адресов
ignore функция Функция обратного вызова, которая фильтрует запросы, чтобы они не регистрировались или не подставлялись. По умолчанию это соответствует запросам, подобным активам, таким как .js, .jsx, .html, и .css файлы.

Возвращаемое значение

  • cy.server() возвращает null .
  • cy.server() нельзя цеплять далее.

Примеры

Без аргументов

После запуска сервера:

  • Любой запрос, который НЕ соответствует cy.route(), будет передан на сервер.
  • Любой запрос, который соответствует функции options.ignore, НЕ будет регистрироваться или подставляться.
  • В журнале команд вы увидите запросы с именами (XHR Stub) или (XHR).
cy.server()

Параметры

Изменение значений по умолчанию для cy.route()

По умолчанию cy.route() наследует некоторые параметры от cy.server().

В этом примере запросы, соответствующие шаблону, будут задерживаться на 1000 мс и иметь статус 422, но их response будет тем, что было установлено в cy.route().

cy.server({
  method: 'POST',
  delay: 1000,
  status: 422,
  response: {},
})

cy.route('/users/', { errors: 'Name cannot be blank' })

Изменение значения по умолчанию задержки для всех маршрутов

Добавление задержки может помочь смоделировать реальную задержку сети. Обычно подставленные ответы возвращаются менее чем за 20 мс. Добавление задержки может помочь визуализировать, как состояние приложения реагирует на запросы, которые находятся в процессе.

// delay each route's response 1500ms
cy.server({ delay: 1500 })

Отправка 404 для несоответствующих запросов

Если вы хотите, чтобы Cypress автоматически отправлял запросы, которые НЕ соответствуют маршрутам, следующий ответ:

Статус Тело Заголовки
404 "" null

Установите force404 на true.

cy.server({ force404: true })
cy.route('/activities/**', 'fixture:activities.json')
// Application Code
$(() => {
  $.get('/activities')

  // this will be sent back 404 since it
  // does not match any of the cy.routes
  $.getJSON('/users.json')
})

Изменение заголовков ответа по умолчанию для всех маршрутов

При подстановке запросов вы можете автоматически контролировать их ответные headers. Это полезно, когда вы хотите отправлять метаданные в headers, такие как информация о страничной навигации или токене.

Cypress автоматически устанавливает Content-Length и Content-Type на основе подставленного вами body ответа.

cy.server({
  headers: {
    'x-token': 'abc-123-foo-bar',
  },
})

cy.route('GET', '/users/1', { id: 1, name: 'Amanda' }).as('getUser')
cy.visit('/users/1/profile')
cy.wait('@getUser')
  .its('responseHeaders')
  .should('have.property', 'x-token', 'abc-123-foo-bar') // true
// Application Code

// lets use the native XHR object
const xhr = new XMLHttpRequest()

xhr.open('GET', '/users/1')

xhr.onload = function () {
  const token = this.getResponseHeader('x-token')

  console.log(token) // => abc-123-foo-bar
}

xhr.send()

Установить пользовательский заголовок запроса для всех запросов

cy.server({
  onAnyRequest: (route, proxy) => {
    proxy.xhr.setRequestHeader('CUSTOM-HEADER', 'Header value')
  },
})

Изменение фильтрации по умолчанию

cy.server() поставляется с функцией ignore , которая по умолчанию фильтрует все запросы на статические ресурсы, такие как .html, .js, .jsx, и .css.

Любой запрос, прошедший проверку ignore , будет пропущен — он не будет регистрироваться и не будет подставляться каким-либо образом (даже если он соответствует конкретному cy.route()).

Идея в том, чтобы никогда не вмешиваться в статические ресурсы, которые извлекаются через Ajax.

Функция фильтрации по умолчанию в Cypress:

const ignore = (xhr) => {
  // this function receives the xhr object in question and
  // will ignore if it's a GET that appears to be a static resource
  return (
    xhr.method === 'GET' &&
    /\.(jsx?|coffee|html|less|s?css|svg)(\?.*)?$/.test(xhr.url)
  )
}

Вы можете переопределить эту функцию своей собственной логикой:

cy.server({
  ignore: (xhr) => {
    // specify your own function that should return
    // truthy if you want this xhr to be ignored,
    // not logged, and not stubbed.
  },
})

Если вы хотите изменить параметр по умолчанию для ВСЕХ cy.server(), вы можете изменить этот параметр постоянно.

Отключить сервер после запуска

Вы можете отключить все подстановки и их эффекты и вернуть их к значению по умолчанию во время выполнения теста. Установив enable на false, это отключит подстановку маршрутов, и XHR больше не будут отображаться как (XHR Stub) в журнале команд. Тем не менее, псевдонимы маршрутизации могут по-прежнему использоваться и будут продолжать соответствовать запросам, но не будут влиять на ответы.

cy.server()
cy.route('POST', '/users', {}).as('createUser')
cy.server({ enable: false })

Примечания

Состояние между тестами

Сервер сохраняется до запуска следующего теста

Cypress автоматически сохраняет конфигурацию сервера и маршрутизации даже после завершения теста. Это означает, что вы можете продолжать использовать приложение и по-прежнему пользоваться подстановкой или другой конфигурацией сервера.

Однако между тестами, когда запускается новый тест, предыдущая конфигурация восстанавливается до чистого состояния. Конфигурация не сохраняется между тестами.

Незавершенные запросы автоматически прерываются между тестами

Когда запускается новый тест, все незавершенные запросы, которые все еще выполняются, автоматически прерываются. На самом деле это происходит по умолчанию, независимо от того, запустили ли вы cy.server().

cy.visit()

Сервер можно запустить до выполнения cy.visit()

Зачастую ваше приложение может выполнять начальные запросы сразу после загрузки (например, аутентификацию пользователя). Cypress позволяет запустить сервер и определить маршруты до выполнения cy.visit(). При последующем посещении сервер и маршруты будут немедленно применены перед загрузкой вашего приложения.

Вы можете подробнее узнать об XHR-стратегии здесь.

cy.request()

cy.server() не влияет на cy.request()

cy.server() и любая конфигурация, переданная в cy.server(), не оказывает влияния на cy.request().

Целью cy.request() является проверка конечных точек на фактически работающем сервере без необходимости запуска приложения front-end.

Правила

Требования

  • cy.server() требует цепочки вызовов от cy .

Утверждения

  • cy.server() не может иметь утверждений в цепочке.

Таймауты

  • cy.server() не может иметь таймауты.

Журнал команд

  • cy.server() не записывается в журнал команд

История

Версия Изменения
6.0.0 Устаревший cy.server() команда
5.0.0 Переименовано whitelist параметр на ignore
0.13.6 Добавлен onAbort параметр обратного вызова
0.5.10 Добавлен delay параметр
0.3.3 Добавлен whitelist параметр
< 0.3.3 Добавлена cy.server() команда

См. также

  • Запросы к сети
  • cy.route()
  • cy.wait()

© 2017 Cypress.io
Licensed under the MIT License.
https://docs.cypress.io/api/commands/server

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API