class ActiveSupport::TestCase
Константы
- Assertion
Открытые методы класса
# File activesupport/lib/active_support/test_case.rb, line 176
Возвращает коллекцию ActiveRecord::FixtureSet.
В файле test_helper.rb необходимо указать require "rails/test_help".
# File activesupport/lib/active_support/test_case.rb, line 182
Задаёт указанный путь к набору фикстур.
Также можно добавить несколько путей.
ActiveSupport::TestCase.fixture_paths << "component1/test/fixtures"
В файле test_helper.rb необходимо указать require "rails/test_help".
# File activesupport/lib/active_support/test_case.rb, line 34 def parallel_worker_id @@parallel_worker_id end
Возвращает идентификатор текущего параллельного рабочего процесса, если тесты выполняются параллельно; в противном случае возвращает nil.
ActiveSupport::TestCase.parallel_worker_id # => 2
# File activesupport/lib/active_support/test_case.rb, line 113
def parallelize(workers: :number_of_processors, with: :processes, threshold: ActiveSupport.test_parallelization_threshold, parallelize_databases: ActiveSupport.parallelize_test_databases)
case
when ENV["PARALLEL_WORKERS"]
workers = ENV["PARALLEL_WORKERS"].to_i
when workers == :number_of_processors
workers = (Concurrent.available_processor_count || Concurrent.processor_count).floor
end
if with == :processes
ActiveSupport.parallelize_test_databases = parallelize_databases
end
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.
Если вы хотите отказаться от стандартного создания Rails отдельной базы данных для каждого процесса и реализовать это самостоятельно, задайте parallelize_databases или настройте параметр через config.active_support.parallelize_test_databases.
parallelize(workers: :number_of_processors, parallelize_databases: false)
Обратите внимание: при использовании одной базы данных несколькими процессами набор тестов может попасть в состояние взаимной блокировки.
# File activesupport/lib/active_support/test_case.rb, line 138 def parallelize_before_fork(&block) ActiveSupport::Testing::Parallelization.before_fork_hook(&block) end
Хук, выполняемый перед разветвлением процессов при параллельном тестировании. С его помощью можно выполнить любые действия перед разветвлением процессов.
Добавьте следующий код в файл test_helper.rb:
class ActiveSupport::TestCase
parallelize_before_fork do
# run this before fork
end
end
# File activesupport/lib/active_support/test_case.rb, line 155 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
# File activesupport/lib/active_support/test_case.rb, line 172 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
# File activesupport/lib/active_support/test_case.rb, line 61 def test_order ActiveSupport.test_order ||= :random end
Возвращает порядок запуска тестовых случаев.
ActiveSupport::TestCase.test_order # => :random
Возможные значения: :random, :parallel, :alpha, :sorted. По умолчанию используется :random.
# File activesupport/lib/active_support/test_case.rb, line 51 def test_order=(new_order) ActiveSupport.test_order = new_order end
Задаёт порядок запуска тестовых случаев.
ActiveSupport::TestCase.test_order = :random # => :random
Допустимые значения:
-
:random(для запуска тестов в случайном порядке) -
:parallel(для параллельного запуска тестов) -
:sorted(для запуска тестов в алфавитном порядке по имени метода) -
:alpha(эквивалентно:sorted)
Открытые методы экземпляра
# File activesupport/lib/active_support/test_case.rb, line 294
Псевдоним для: refute_match
# File activesupport/lib/active_support/test_case.rb, line 217
Псевдоним для: refute_empty
# File activesupport/lib/active_support/test_case.rb, line 228
Псевдоним для: refute_equal
# File activesupport/lib/active_support/test_case.rb, line 239
Псевдоним для: refute_in_delta
# File activesupport/lib/active_support/test_case.rb, line 250
Псевдоним для: refute_in_epsilon
# File activesupport/lib/active_support/test_case.rb, line 261
Псевдоним для: refute_includes
# File activesupport/lib/active_support/test_case.rb, line 272
Псевдоним для: refute_instance_of
# File activesupport/lib/active_support/test_case.rb, line 283
Псевдоним для: refute_kind_of
# File activesupport/lib/active_support/test_case.rb, line 305
Псевдоним для: refute_nil
# File activesupport/lib/active_support/test_case.rb, line 316
Псевдоним для: refute_operator
# File activesupport/lib/active_support/test_case.rb, line 327
Псевдоним для: refute_predicate
# File activesupport/lib/active_support/test_case.rb, line 338
Псевдоним для: refute_respond_to
# File activesupport/lib/active_support/test_case.rb, line 349
Псевдоним для: refute_same
# File activesupport/lib/active_support/test_case.rb, line 199 def parallel_worker_id self.class.parallel_worker_id end
Возвращает идентификатор текущего параллельного рабочего процесса, если тесты выполняются параллельно
© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.