這是 Test Prescription 這本書部分內容的筆記整理,如果你對這篇文章有興趣,強烈建議你去讀讀這本書。
下面是一些fixtures的範例:(時間格式、斷行、支援association、支援erb語法但要注意縮排)
spec/fixtures/projects.yml
book:
name: Write the book
due_date: 2014-04-14
runway:
name: Project Runway
due_date: <%= 1.month.from_now %>
description: |
The awesomest project ever.
It's really, really great.
spec/fixtures/tasks.yml
chapter:
title: Write a chapter
project: book
<% 10.times do |i| %>
task_<%=i%>:
name: "Task <%= i %>"
<% end %>
下面是一個在測試中使用fixture的範例:
spec/models/product_spec.rb
it "should have a default name" do
project = projects(:book)
expect(project.name).to eq("Write the book")
end
fixtures預設在跑完每個測試案例就會恢複測試資料,假如想要測試案例之間資料的變換,這個行為就變的很麻煩。你可以在spec/spec_helper.rb中加上config.use_transactional_fixtures = false關閉這個行為,但因為這個設定是全域設定,這會變成所有的測試資料都不會復原,反而失去「復原功能」的好處。簡而言之,如果要測試案例之間資料的變換,不要用fixtures來做這件事。