Ich bin auf Rails 4 und habe festgestellt, dass einige meiner RSpec-Tests fehlschlagen, weil einige meiner Test-Refactorings einen Vorher-Filter verwenden (vermutlich aufgrund von Transaktionen). Dieser Beitrag beschreibt ein ähnliches Problem:
Rails-Testdatenbank wird nach einigen Läufen nicht gelöscht
Gibt es anstelle des DatabaseCleaner-Gems einen Rake-Befehl zum Löschen der Testdatenbank? Ich glaube, rake db:test:prepare
ist in Rails 4 veraltet. Auch wenn vor Transaktionen wie
post :create, user: Fabricate.attributes_for(:user)
sind hartnäckig. Gibt es eine alternative Möglichkeit zum Refactoring, um zu vermeiden, dass die Testdatenbank manuell gelöscht werden muss?
quelle
ApplicationRecord
anstelle vonActiveRecord::Base
blog.bigbinary.com/2015/12/28/…rake db:structure:load
Sie diese Option, wenn Sie struct.sql anstelle von schema.rb verwenden.RAILS_ENV=test bundle exec rake db:drop db:create db:schema:load
Es kann sein:
quelle
rake db:seed
bundle exec rails db:reset RAILS_ENV=test
Manchmal müssen Sie diesen Befehl möglicherweise ausführen (optional).
rails db:environment:set RAILS_ENV=test
Das Löschen Ihrer Testdatenbank sollte jedoch so einfach sein wie:
rails db:drop db:create db:migrate RAILS_ENV=test
quelle
Sie können einen Nachfilter hinzufügen, der alle Einträge aus den betroffenen Tabellen löscht.
quelle
Theoretisch
ActiveRecord::Migration.maintain_test_schema!
sollte dies den Trick tun. Setzen Sie es einrails_helper.rb
quelle
Am Ende habe ich eine einfache Rechenaufgabe geschrieben, die je nach ausgeführtem Befehl alle Test- und Entwicklungsdatenbanken löscht / migriert (oder löscht und migriert).
Es enthält Funktionen, mit denen der Benutzer gefragt wird, ob er bei Auftreten eines Fehlers fortfahren möchte, und verwendet die popen3-Methode von Open3 (sodass wir auf stdin, stdout und stderr zugreifen können; fehlgeschlagene Befehle führen nicht zum Prozess der Rake-Task Abbruch (anders als bei Verwendung des Systems )).
Hoffentlich hilft das jemandem. :) :)
https://github.com/xtrasimplicity/rake_all_db_helper/
Bearbeiten: Dies muss manuell von Ihrer Shell ausgeführt werden, wenn Sie jedoch Ihre Datenbank löschen möchten.
quelle