Есть ли способ очистить тесты базы данных в системных тестах Rails 6.0.3.1. Я думал, что Rails очищает? - PullRequest
0 голосов
/ 18 июня 2020

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

  • Ruby "2.7.1"
  • Рельсы "6.0.3.1"
  • Ma c OS Catalina 10.15.5

  • Использование Rails Minitest и FactoryBot по умолчанию для тестовых данных.

Проблема: У меня есть тестовые данные, которые используются совместно с файлами системных тестов и, следовательно, неудачные тесты. Когда я запускаю файлы системного теста по отдельности, тесты проходят, но это неудобно.

Я использую конфигурацию системного теста из коробки, как в application_system_test_case.rb

Это мой сценарий тестирования системы. У меня есть 3 Customers в customers_system_test.rb файле и 1 Customer (пока) в job_description_system_test.rb Клиент 1 появляется в customers_system_test.rb тестовых снимках экрана с ошибкой, которые Rails предоставляет для удобства.

Примечание: все 3 неудачных теста касаются количества записей, например assert_equal Customer.count, 3

3 неудачных теста

test "visit create customer and navigate back" do
  ...
  assert_equal Customer.count, 3
end
test "cancel destroying a customer" do
  assert_equal Customer.count, 3
  ...  
end
test "destroy a customer" do
  assert_equal Customer.count, 3
  ...
end

Интересно, что у меня была такая же проблема с тестовыми данными, которые не очищались при запуске rails test для контроллера, интеграционных тестов и т. Д. c: способ, которым я обхожу, заключается в добавлении следующего фрагмента в test_helper.rb:

(ActiveRecord::Base.connection.tables - %w{schema_migrations}).each do |table_name| ActiveRecord::Base.connection.execute "TRUNCATE TABLE #{table_name} CASCADE;" end Не работает для системных тестов

Я чувствую, что упускаю очевидное?

test_helper.rb

require "simplecov"
SimpleCov.start "rails"

ENV["RAILS_ENV"] ||= "test"
require_relative "../config/environment"
require "rails/test_help"

class ActiveSupport::TestCase
  include FactoryBot::Syntax::Methods
  include Warden::Test::Helpers

  # Run tests in parallel with specified workers
  # parallelize(workers: :number_of_processors)
  parallelize(workers: 1)

  # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
  # fixtures :all

  # Add more helper methods to be used by all tests here...
  include Devise::Test::IntegrationHelpers
end

(ActiveRecord::Base.connection.tables - %w{schema_migrations}).each do |table_name| 
  ActiveRecord::Base.connection.execute "TRUNCATE TABLE #{table_name} CASCADE;"
end

1 Ответ

0 голосов
/ 03 сентября 2020

Хорошо, я выполнил все тесты, включая системные тесты, выполнив следующие действия (не знал, что это необходимо в Rails 6)

...

setup do
    sign_in user
    @customer_1 = FactoryBot.create(:customer_with_job_descriptions)
    @job_description_2 = FactoryBot.create(:job_description, customer_id: @customer_1.id)
  end

  teardown do
    @customer_1.destroy!
    @job_description_2.destroy!
  end

...


Ссылка: 8 Установка и завершение https://guides.rubyonrails.org/v3.2/testing.html#setup -и-разборка


........................................................................................

Finished in 22.971069s, 4.3968 runs/s, 21.4182 assertions/s.
101 runs, 492 assertions, 0 failures, 0 errors, 0 skips

...