Saya menggunakan Rails 4 dan telah memperhatikan beberapa tes RSpec saya gagal karena beberapa refactoring tes saya menggunakan filter sebelum (mungkin karena transaksi). Posting ini menjelaskan masalah serupa:
Rails test database tidak dibersihkan setelah beberapa kali dijalankan
Sebagai pengganti menggunakan permata DatabaseCleaner, apakah ada perintah rake untuk menghapus database pengujian? Saya percaya rake db:test:prepare
sudah usang di Rails 4. Juga, jika sebelum transaksi seperti
post :create, user: Fabricate.attributes_for(:user)
gigih. Apakah ada cara alternatif untuk refactoring untuk menghindari kebutuhan untuk menghapus database pengujian secara manual?
sumber
ApplicationRecord
sebagai penggantiActiveRecord::Base
blog.bigbinary.com/2015/12/28/…rake db:structure:load
jika Anda menggunakan structure.sql, bukan schema.rb.RAILS_ENV=test bundle exec rake db:drop db:create db:schema:load
Bisa jadi:
bundle exec rake db:reset RAILS_ENV=test
sumber
rake db:seed
... yang mungkin atau mungkin tidak menjadi masalahbundle exec rails db:reset RAILS_ENV=test
Terkadang Anda mungkin perlu menjalankan perintah ini (opsional)
rails db:environment:set RAILS_ENV=test
Tapi yang pasti untuk menghapus database pengujian Anda semudah:
rails db:drop db:create db:migrate RAILS_ENV=test
sumber
Anda dapat menambahkan filter setelah menghapus semua entri dari tabel terkait.
sumber
Secara teori ini
ActiveRecord::Migration.maintain_test_schema!
harus melakukan trik. Masukkanrails_helper.rb
sumber
Saya akhirnya menulis tugas rake sederhana yang menjatuhkan / memigrasi (atau menjatuhkan & memigrasi) semua database pengujian dan pengembangan, tergantung pada perintah yang dijalankan.
Ini mencakup fungsionalitas untuk meminta pengguna, apakah mereka ingin melanjutkan ketika terjadi kesalahan, dan menggunakan metode popen3 Open3 (sehingga kita dapat mengakses stdin, stdout dan stderr; dan setiap perintah yang gagal tidak mengakibatkan proses tugas rake membatalkan (tidak seperti saat menggunakan sistem )).
Semoga ini membantu seseorang. :)
https://github.com/xtrasimplicity/rake_all_db_helper/
edit: Ini perlu dijalankan secara manual dari shell Anda, kapan pun Anda ingin menghapus database Anda.
sumber