Spec-Zone.ru › Ruby on Rails 7.0

class ActiveSupport::TestCase

Родительский класс:
Minitest::Test
Включенные модули:
ActiveSupport::Testing::Assertions, ActiveSupport::Testing::Deprecation, ActiveSupport::Testing::TimeHelpers, ActiveSupport::Testing::FileFixtures

Константы

Assertion

Открытые методы класса

parallelize(workers: :number_of_processors, with: :processes, threshold: ActiveSupport.test_parallelization_threshold) Показать исходный код
# File activesupport/lib/active_support/test_case.rb, line 79
def parallelize(workers: :number_of_processors, with: :processes, threshold: ActiveSupport.test_parallelization_threshold)
  workers = Concurrent.physical_processor_count if workers == :number_of_processors
  workers = ENV["PARALLEL_WORKERS"].to_i if ENV["PARALLEL_WORKERS"]

  return if workers <= 1

  Minitest.parallel_executor = ActiveSupport::Testing::ParallelizeExecutor.new(size: workers, with: with, threshold: threshold)
end

Параллелизует набор тестов.

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

test-database-0
test-database-1

Если ENV["PARALLEL_WORKERS"] установлен, аргумент workers будет игнорироваться, и вместо него будет использоваться переменная среды. Это полезно для сред CI или других сред, где может потребоваться больше работников, чем для локального тестирования.

Если количество работников установлено в 1 или меньше, тесты не будут параллелизованы.

Если workers установлен в :number_of_processors, количество работников будет установлено в фактическое количество ядер на вашем компьютере.

Метод параллелизации по умолчанию — разветвление процессов. Если вы хотите использовать потоки, вы можете передать with: :threads методу parallelize. Обратите внимание, что параллелизация с использованием потоков не создает несколько баз данных и в настоящее время не работает с системными тестами.

parallelize(workers: :number_of_processors, with: :threads)

Параллелизация с использованием потоков напрямую использует параллельный исполнитель minitest. Параллелизация процессов использует сервер Ruby DRb.

Поскольку параллелизация создает накладные расходы, она включается только тогда, когда количество тестов для запуска превышает параметр threshold. Значение по умолчанию равно 50, и его можно настроить через config.active_support.test_parallelization_threshold.

parallelize_setup(&block) Показать исходный код
# File activesupport/lib/active_support/test_case.rb, line 101
def parallelize_setup(&block)
  ActiveSupport::Testing::Parallelization.after_fork_hook(&block)
end

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

Примечание: эта функция недоступна при параллелизации с использованием потоков.

В вашем test_helper.rb добавьте следующее:

class ActiveSupport::TestCase
  parallelize_setup do
    # create databases
  end
end
parallelize_teardown(&block) Показать исходный код
# File activesupport/lib/active_support/test_case.rb, line 118
def parallelize_teardown(&block)
  ActiveSupport::Testing::Parallelization.run_cleanup_hook(&block)
end

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

Примечание: эта функция недоступна при параллелизации с использованием потоков.

В вашем test_helper.rb добавьте следующее:

class ActiveSupport::TestCase
  parallelize_teardown do
    # drop databases
  end
end
test_order() Показать исходный код
# File activesupport/lib/active_support/test_case.rb, line 42
def test_order
  ActiveSupport.test_order ||= :random
end

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

ActiveSupport::TestCase.test_order # => :random

Возможные значения: :random, :parallel, :alpha, :sorted. По умолчанию: :random.

test_order=(new_order) Показать исходный код
# File activesupport/lib/active_support/test_case.rb, line 32
def test_order=(new_order)
  ActiveSupport.test_order = new_order
end

Устанавливает порядок, в котором выполняются тестовые случаи.

ActiveSupport::TestCase.test_order = :random # => :random

Допустимые значения:

  • :random (для запуска тестов в случайном порядке)

  • :parallel (для запуска тестов параллельно)

  • :sorted (для запуска тестов в алфавитном порядке по имени метода)

  • :alpha (эквивалентно :sorted)

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

Spec-Zone.ru

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