Trước hết: Bạn không thể sử dụng phương pháp fixtures
trong :all
/:context
/:suite hook
. Đừng cố gắng sử dụng đồ đạc trong các móc này (như post(:my_post)
).
Bạn có thể chuẩn bị đồ đạc chỉ trong mô tả/bối cảnh như Infuse viết trước đó.
Gọi
fixtures :students, :teachers
không tải bất kỳ dữ liệu vào DB! Chỉ cần chuẩn bị các phương pháp trợ giúp students
và teachers
. Các hồ sơ được yêu cầu được nạp lazily trong thời điểm này khi bạn lần đầu tiên thử truy cập chúng. Ngay trước
dan=students(:dan)
Điều này sẽ tải sinh viên và giáo viên theo cách delete all from table + insert fixtures
.
Vì vậy, nếu bạn chuẩn bị một số học sinh trong móc trước (: ngữ cảnh), chúng sẽ biến mất ngay bây giờ !!
Chèn bản ghi được thực hiện chỉ một lần trong bộ thử nghiệm.
Bản ghi từ đồ đạc sẽ không bị xóa ở cuối bộ kiểm tra. Chúng được xóa và chèn lại vào lần chạy bộ thử nghiệm tiếp theo.
dụ:
#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
Tất cả sự mong đợi trong các thử nghiệm trên sẽ vượt qua
Nếu những thử nghiệm đang chạy lại (trong bộ tới) và theo thứ tự này, so với kỳ vọng
expect(Student.count).to eq 1
sẽ KHÔNG được đáp ứng! Sẽ có 3 học viên (: dan,: paul và new @james). Tất cả chúng sẽ bị xóa trước students(:dan)
và chỉ: paul và: dan sẽ được chèn lại.
Thay vì đồ đạc, hãy thử [factory_girl] (http://www.fabricationgem.org/) hoặc [fabrication] (http://www.fabricationgem.org/). –