Rails 4: Test veritabanı nasıl sıfırlanır?


88

Rails 4'teyim ve bazı RSpec testlerimin başarısız olduğunu fark ettim çünkü bazı test yeniden düzenlemelerim bir before filtresi kullanıyor (muhtemelen işlemler nedeniyle). Bu gönderi benzer bir sorunu açıklıyor:

bazı çalıştırmalardan sonra raylar test veritabanı temizlenmiyor

DatabaseCleaner cevherini kullanmak yerine, test veritabanını temizlemek için bir rake komutu var mı? rake db:test:prepareRails 4'te kullanımdan kaldırıldığına inanıyorum . Ayrıca,

post :create, user: Fabricate.attributes_for(:user)

kalıcıdır. Test veritabanını manuel olarak temizleme ihtiyacını ortadan kaldırmanın alternatif bir yolu var mı?

Yanıtlar:


121

Aşırı bir çözüm şu şekilde olacaktır:

bundle exec rake db:drop RAILS_ENV=test
bundle exec rake db:create RAILS_ENV=test
bundle exec rake db:schema:load RAILS_ENV=test

Bunların hepsini bir komisyon görevinde yapabilir ve çalıştırabilirsiniz.

Buradan başka bir çözüm , spec_helper.rbdosyanızı aşağıdakileri eklemektir.

config.after :all do
  ActiveRecord::Base.subclasses.each(&:delete_all)
end

Feragatname: Bunu test etmedim ve her durumda çalışmayabileceği için SO gönderisini okumalısınız .

Bununla birlikte, bunun gibi durumlardan kaçınmak için veritabanı temizleyici cevherini kullanmanızı tavsiye ederim.


1
İlk 3 rake db: * tüm tabloları silip şemadan oluşturduğundan yalnızca sonuncusu ile değiştirilebilir.
konole

2
Rails 5 için blog.bigbinary.com/2015/12/28/…ApplicationRecord yerine kullanınActiveRecord::Base
Yo Ludke

3
rake db:structure:loadSchema.rb yerine structure.sql kullanıyorsanız kullanın .
Archonic

2
Yukarıdakiler için daha temiz bir 1 astar basitçe:RAILS_ENV=test bundle exec rake db:drop db:create db:schema:load
stwr667

98

Olabilir:

bundle exec rake db:reset RAILS_ENV=test

21
Bunun da çalıştığını fark ettim rake db:seed ... bu bir sorun olabilir veya olmayabilir
Harry Wood

1
Rails 5 kullanıyorsanız, komut artık komisyon yerine raylar :bundle exec rails db:reset RAILS_ENV=test
Uriel Hernández

19

Bazen bu komutu çalıştırmanız gerekebilir (isteğe bağlı)

rails db:environment:set RAILS_ENV=test

Ancak test veritabanınızı silmek kesinlikle şu kadar kolay olmalıdır:

rails db:drop db:create db:migrate RAILS_ENV=test


2

İlgili tablolardan tüm girişleri silerek bir son filtre ekleyebilirsiniz.


0

Teorik olarak bu ActiveRecord::Migration.maintain_test_schema!hile yapmalı. İçine koyrails_helper.rb


0

Yürütülen komuta bağlı olarak tüm test ve geliştirme veritabanlarını düşüren / göç ettiren (veya düşüren ve geçiren) basit bir komisyon görevi yazdım.

Kullanıcıya bir hata oluştuğunda devam etmek isteyip istemediklerini sormak için işlevsellik içerir ve Open3'ün popen3 yöntemini kullanır (öyle ki stdin, stdout ve stderr'e erişebiliriz; ve başarısız komutlar rake görevinin süreciyle sonuçlanmaz. iptal ( sistem kullanımının aksine ).

Umarım bu birine yardımcı olur. :)

https://github.com/xtrasimplicity/rake_all_db_helper/

edit: Ancak, veritabanınızı temizlemek istediğinizde bunun kabuğunuzdan manuel olarak yürütülmesi gerekecektir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.