Я использую Rails 4 и заметил, что некоторые из моих тестов RSpec терпят неудачу, потому что некоторые из моих рефакторингов тестов используют предварительный фильтр (предположительно из-за транзакций). В этом сообщении описывается похожая проблема:
База данных тестов rails не очищается после нескольких запусков
Есть ли команда rake для очистки тестовой базы данных вместо использования гема DatabaseCleaner? Я считаю, что rake db:test:prepare
это не рекомендуется в Rails 4. Кроме того, если до транзакций вроде
post :create, user: Fabricate.attributes_for(:user)
настойчивы. Есть ли альтернативный способ рефакторинга, чтобы избежать необходимости вручную очищать тестовую базу данных?
источник
ApplicationRecord
вместоActiveRecord::Base
blog.bigbinary.com/2015/12/28/…rake db:structure:load
если вы используете structure.sql вместо schema.rb.RAILS_ENV=test bundle exec rake db:drop db:create db:schema:load
Может быть:
bundle exec rake db:reset RAILS_ENV=test
источник
rake db:seed
... что может быть, а может и не быть проблемой,bundle exec rails db:reset RAILS_ENV=test
Иногда вам может потребоваться запустить эту команду (необязательно)
rails db:environment:set RAILS_ENV=test
Но наверняка стереть вашу тестовую базу данных должно быть так же просто, как:
rails db:drop db:create db:migrate RAILS_ENV=test
источник
Вы можете добавить фильтр после удаления всех записей из соответствующих таблиц.
источник
Теоретически это
ActiveRecord::Migration.maintain_test_schema!
должно помочь. Положи это вrails_helper.rb
источник
Я закончил тем, что написал простую задачу rake, которая удаляет / переносит (или отбрасывает и переносит) все тестовые базы данных и базы данных разработки, в зависимости от выполненной команды.
Он включает в себя функцию подсказки пользователю, хотят ли они продолжить при возникновении ошибки, и использует метод popen3 Open3 (так что мы можем получить доступ к stdin, stdout и stderr; и любые неудачные команды не приводят к процессу задачи rake прерывание (в отличие от системы )).
Надеюсь, это кому-то поможет. :)
https://github.com/xtrasimplicity/rake_all_db_helper/
edit: Это нужно будет выполнить вручную из вашей оболочки, однако, когда вы захотите очистить свою базу данных.
источник