Zu allererst: Sie können keine Methode fixtures
in :all
/:context
/:suite hook
. Versuchen Sie nicht, Vorrichtungen in diesen Haken zu verwenden (wie post(:my_post)
).
Sie können Fixtures nur im describe/context Block erstellen, während Infuse früher schreibt.
Anruf
fixtures :students, :teachers
Legen Sie keine Daten in DB! Just bereitet Helper Methoden und teachers
. Geforderte Datensätze werden in dem Moment, in dem Sie versuchen, auf sie zuzugreifen, langsam geladen. Kurz vor
dan=students(:dan)
Dies wird in delete all from table + insert fixtures
Weise Schüler und Lehrer laden.
Also, wenn Sie einige Studenten in vor (Kontext) Haken vorbereiten, werden sie jetzt weg sein !!
Einfügen von Datensätzen erfolgt nur einmal in Testsuite.
Datensätze von Fixtures werden am Ende der Testsuite nicht gelöscht. Sie werden gelöscht und beim nächsten Testlauf wieder eingefügt.
Beispiel:
#students.yml
dan:
name: Dan
paul:
name: Paul
#teachers.yml
snape:
name: Severus
describe Student do
fixtures :students, :teachers
before(:context) do
@james=Student.create!(name: "James")
end
it "have name" do
expect(Student.find(@james.id).to be_present
expect(Student.count).to eq 1
expect(Teacher.count).to eq 0
students(:dan)
expect(Student.find_by_name(@james.name).to be_blank
expect(Student.count).to eq 2
expect(Teacher.count).to eq 1
end
end
#but when fixtures are in DB (after first call), all works as expected (by me)
describe Teacher do
fixtures :teachers #was loade in previous tests
before(:context) do
@james=Student.create!(name: "James")
@thomas=Teacher.create!(name: "Thomas")
end
it "have name" do
expect(Teacher.find(@thomas.id).to be_present
expect(Student.count).to eq 3 # :dan, :paul, @james
expect(Teacher.count).to eq 2 # :snape, @thomas
students(:dan)
expect(Teacher.find_by_name(@thomas.name).to be_present
expect(Student.count).to eq 3
expect(Teacher.count).to eq 2
end
end
Alle Erwartungen oben in Tests
Wenn diese Prüfung bestehen erneut ausgeführt werden (in der nächsten Suite) und in dieser Reihenfolge als Erwartung
expect(Student.count).to eq 1
wird nicht erfüllt! Es wird 3 Studenten geben (: dan,: paul und fresh new @james). Alle werden vor students(:dan)
gelöscht und nur: paul und: dan wird wieder eingefügt.
Anstelle von Fixtures versuchen Sie [factory_girl] (http://www.fabricationgem.org/) oder [fabrication] (http://www.fabricationgem.org/). –