2011-01-11 8 views
0

Ich habe Fabriken, die einige Setup-Daten enthalten. Beispiel:Ich kann nicht auf Seeds in meinen Fabriken zugreifen, wenn ich Rails-Unit-Tests ausführe

Factory.define :event do |event| 
    event.name { Factory.next(:email) } 
    event.blurb "Test event blurb" 
    event.association(:owner, :factory => :user) 
    event.countries Country.all 
end 

Country.all weist diesem Ereignis nur alle Länder aus einer Nachschlagetabelle zu. Ich schließe alle Länder durch Samen Laden, bevor ich meine Tests mit dieser Linie in meinem Test Helfer laufen:

require "#{Rails.root}/db/seeds.rb" 

Dies funktioniert gut, wenn einzelne Unit-Tests ausgeführt werden:

ruby test/unit/event_test.rb 

jedoch Country.all gibt nichts zurück Wenn ich den Test unter Verwendung von:

rake test:units 

Wer weiß, warum das passiert?

Antwort

1

Sie benötigen Samen im test_helper, es wird einmal geladen. Nach jedem Testlauf wird die Datenbank gelöscht, einschließlich der gesetzten Daten. Um Samples jedes Mal laden zu können, fügen Sie etwas wie dieses in die Klassendefinition von test_helper ein.

class ActiveSupport::TestCase 
    # this line: 
    setup { load "#{Rails.root}/db/seeds" } 
end 
+0

getan werden mußte auch zur Kenntnis, ich soll dass es notwendig war Attribute zu setzen, die auf die Datenbank in einem Block zugreifen. event.countries Country.all wird event.countries {Country.all} – Tony

0

Werfen Sie einen Blick auf den Quellcode für das rake Juwel. Es sieht so aus, als müssten Sie Ihre seeds.rb Datei manuell in jede Testdatei laden, oder noch besser von test_helper.rb.

+0

ich es von meinem test_helper.rb schon tat, sondern als Hakunin darauf hingewiesen, in jeder Datei und auch die Attribute Zugriff auf die Daten in einer Fabrik benötigt werden, setzen in den Blöcken – Tony

Verwandte Themen