Spec-Zone.ru › Ruby on Rails 8.1

класс ActionDispatch::SystemTestCase

Родительский класс:
ActiveSupport::TestCase
Подключённые модули:
ActionDispatch::SystemTesting::TestHelpers::ScreenshotHelper

Системное тестирование

Системные тесты позволяют тестировать приложения в браузере. Поскольку в системных тестах используется настоящий браузер, вы можете легко тестировать весь JavaScript из набора тестов.

Чтобы создать системный тест в приложении, унаследуйте класс теста от ApplicationSystemTestCase. В основе системных тестов лежит Capybara; настройки можно конфигурировать через файл application_system_test_case.rb, который создаётся при генерации первого системного теста.

Пример системного теста:

require "application_system_test_case"

class Users::CreateTest < ApplicationSystemTestCase
  test "adding a new user" do
    visit users_path
    click_on 'New User'

    fill_in 'Name', with: 'Arya'
    click_on 'Create User'

    assert_text 'Arya'
  end
end

При генерации системных тестов также будет создан файл application_system_test_case.rb, содержащий базовый класс для системного тестирования. Здесь можно изменить драйвер, добавить настройки Capybara и задать другие параметры системных тестов.

require "test_helper"

class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
  driven_by :selenium, using: :chrome, screen_size: [1400, 1400]
end

По умолчанию ActionDispatch::SystemTestCase работает с драйвером Selenium, браузером Chrome и размером окна браузера 1400x1400.

Изменить параметры конфигурации драйвера просто. Допустим, вы хотите использовать браузер Firefox вместо Chrome. Добавьте следующий код в файл application_system_test_case.rb:

require "test_helper"

class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
  driven_by :selenium, using: :firefox
end

Методу driven_by требуется аргумент с именем драйвера. Ключевые аргументы — :using для браузера и :screen_size для изменения размера окна браузера. Эти параметры неприменимы к безголовым драйверам и будут молча проигнорированы, если их передать.

Также поддерживаются безголовые браузеры, такие как Chrome и Firefox без графического интерфейса. Чтобы использовать такие браузеры, задайте аргумент :using равным :headless_chrome или :headless_firefox.

Чтобы использовать безголовый драйвер, например Cuprite, измените Gemfile, заменив Selenium на Cuprite, а затем укажите имя драйвера в файле application_system_test_case.rb. В этом случае параметр :using можно не указывать, поскольку драйвер работает без графического интерфейса. При этом вы по-прежнему можете использовать :screen_size для изменения размера окна браузера, а также :options для передачи параметров, поддерживаемых драйвером. Сведения о поддерживаемых параметрах см. в документации драйвера.

require "test_helper"
require "capybara/cuprite"

class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
  driven_by :cuprite, screen_size: [1400, 1400], options:
    { js_errors: true }
end

Для некоторых драйверов необходимо передавать возможности браузера в блоке, а не через хеш options.

Например, чтобы включить эмуляцию мобильного устройства в Chrome, нужно создать экземпляр объекта Chrome::Options из Selenium и задать возможности в блоке.

В блок будет передан экземпляр <Driver>::Options, в котором можно определить нужные возможности. Сведения о поддерживаемых параметрах см. в документации драйвера.

class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
  driven_by :selenium, using: :chrome, screen_size: [1024, 768] do |driver_option|
    driver_option.add_emulation(device_name: 'iPhone 6')
    driver_option.add_extension('path/to/chrome_extension.crx')
  end
end

Поскольку ActionDispatch::SystemTestCase служит прослойкой между Capybara и Rails, системные тесты поддерживают любой драйвер, поддерживаемый Capybara, если подключить необходимые гемы и файлы.

Константы

DEFAULT_HOST

Общедоступные методы класса

driven_by (driver, using: :chrome, screen_size: [1400, 1400], options: {}, &capabilities) Показать исходный код
# File actionpack/lib/action_dispatch/system_test_case.rb, line 158
def self.driven_by(driver, using: :chrome, screen_size: [1400, 1400], options: {}, &capabilities)
  driver_options = { using: using, screen_size: screen_size, options: options }

  self.driver = SystemTesting::Driver.new(driver, **driver_options, &capabilities)
end

Параметры конфигурации системного тестирования

По умолчанию используется Selenium с Chrome и размером окна 1400x1400.

Примеры:

driven_by :cuprite

driven_by :selenium, screen_size: [800, 800]

driven_by :selenium, using: :chrome

driven_by :selenium, using: :headless_chrome

driven_by :selenium, using: :firefox

driven_by :selenium, using: :headless_firefox
served_by (host:, port:) Показать исходный код
# File actionpack/lib/action_dispatch/system_test_case.rb, line 167
def self.served_by(host:, port:)
  Capybara.server_host = host
  Capybara.server_port = port
end

Настройка сервера приложения для системного тестирования.

По умолчанию используется localhost. Этот метод позволяет задать имя хоста и порт вручную.

© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

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