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?

War es hilfreich?

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 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top