Transaktions Vorrichtungen in Rspec Deaktivierung hat keine Wirkung
-
25-09-2019 - |
Frage
Aufgrund einer alten Datenbank Ich verwende, ich bin fest mit MySQL mit MyISAM, die meine Tabellen bedeutet nicht, Transaktionen unterstützen. Dies ist die Tests verursacht scheitern, da Tabellendaten erzeugt (ich verwende factory_girl für die Lampen) durch die Tests sind nicht für jedes Szenario rückgängig gemacht.
Ich entdeckte, dass Rspec die config.use_transactional_fixtures
Konfigurationseinstellung in spec_helper.rb aussetzt.
, die standardmäßig auf true gesetzt ist. Wenn ich es auf false gesetzt, ich sehe keine Auswirkung auf meine Prüfungen; sie immer noch wegen doppelten Datensätze fehlschlagen.
Ist das nicht an die DB alle Änderungen automatisch abrollen soll Einstellung? Oder soll ich das manuell tun?
Lösung
Sie haben recht - wenn Ihre Datenbank keine Transaktionen unterstützen Sie mehrere SQL-Befehle ausgeben müssen Daten auszulöschen vor jeder Anweisung:
TRUNCATE TABLE tablename;
Ein für jede Ihrer Tabellen.
In Ihrem helper.rb dies versuchen:
Spec::Runner.configure do |config|
config.before(:each) do
tables = %{users posts tags}
tables.each do |t|
ActiveRecord::Base.connection.execute('TRUNCATE TABLE #{t}')
end
end
...
end