Spec-Zone.ru › Ruby on Rails 6.0

класс ActiveSupport::TestCase

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

Константы

Assertion

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

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

  return if workers <= 1

  executor = case with
             when :processes
               Testing::Parallelization.new(workers)
             when :threads
               Minitest::Parallel::Executor.new(workers)
             else
               raise ArgumentError, "#{with} is not a supported parallelization executor."
  end

  self.lock_threads = false if defined?(self.lock_threads) && with == :threads

  Minitest.parallel_executor = executor

  parallelize_me!
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.

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

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

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

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

class ActiveSupport::TestCase
  parallelize_setup do
    # create databases
  end
end
parallelize_teardown() { |worker| ... } Показать исходный код
# File activesupport/lib/active_support/test_case.rb, line 128
def parallelize_teardown(&block)
  ActiveSupport::Testing::Parallelization.run_cleanup_hook do |worker|
    yield worker
  end
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 41
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 31
def test_order=(new_order)
  ActiveSupport.test_order = new_order
end

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

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

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

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

  • :parallel (для выполнения тестов параллельно)

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

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

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

Spec-Zone.ru

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