Question

En raison d'une base de données de l'héritage que je utilise, je suis coincé avec MySQL en utilisant MyISAM, ce qui signifie que mes tableaux ne supportent pas les transactions. Cela est à l'origine des tests à l'échec, car les données de table générées (j'utilise factory_girl pour les appareils) par les tests ne sont pas rétablis pour chaque scénario.

J'ai découvert que Rspec expose la configuration config.use_transactional_fixtures mise en spec_helper.rb.

qui est définie sur true par défaut. Lorsque je l'ai mis à faux, je ne vois aucun effet sur mes tests; ils ne parviennent pas toujours à cause de reproduire des enregistrements.

est-ce pas ce paramètre censé automatiquement les déroulez modifications apportées à la DB? Ou suis-je censé faire manuellement?

Était-ce utile?

La solution

Vous avez raison - si votre base de données ne prend pas en charge les transactions que vous devez émettre plusieurs commandes SQL pour effacer les données avant chaque instruction:

TRUNCATE TABLE tablename;

L'un pour chacun de vos tables.

Dans votre helper.rb, essayez ceci:

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 
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top