Fixture Replacement
==
Skeleton of Dummy
Data for Tests
Slide 31
Slide 31 text
Fixture == Data itself
Fixture Replacement
== Skeleton of Data
Slide 32
Slide 32 text
# factories/users.rb
Factory.define(:album) do |a|
a.title "Album Title"
a.password "Album Password"
end
album = Factory.create(:album)
album = Factory.create(:album,
:title => "Happy Wedding")
Slide 33
Slide 33 text
# factories/users.rb
Factory.define(:alice) do |u|
u.email "[email protected]"
end
Factory.define(:bob) do |u|
u.email "[email protected]"
end
Slide 34
Slide 34 text
# factories/users.rb
Factory.sequence(:email) do |n|
"user_#{n}@example.com"
end
Factory.define(:user) do |u|
u.email { Factory.next(:email) }
end
Slide 35
Slide 35 text
Flexible
Slide 36
Slide 36 text
# factories/pages.rb
Factory.define(:twitter) do |p|
p.url "http://twitter.com/"
end
Factory.define(:facebook) do |p|
p.url "http://facebook.com/"
end
Slide 37
Slide 37 text
# factories/users.rb
Factory.define(:alice) do |u|
u.pages {[ Factory(:twitter) ]}
end
Factory.define(:bob) do |u|
u.pages {[ Factory(:facebook) ]}
end
Slide 38
Slide 38 text
bob = Factory.create(:bob)
assert bob.pages.first.url ==
"http://facebook.com/"
# SUCCESS
Slide 39
Slide 39 text
But...
Flexible
Slide 40
Slide 40 text
Fixture
Replacement is
Not a Silver
Bullet
Slide 41
Slide 41 text
Children w/
Independent
Parent
Slide 42
Slide 42 text
# factories/albums.rb
Factory.define(:album) do |a|
a.user { Factory(:user) }
end
Factory.define(:paid) do |a|
a.user { Factory(:user) }
end
Slide 43
Slide 43 text
3.times do
album = Factory.create(:album)
end
paid = Factory.create(:paid)
user = paid.user
assert user.albums.count == 4
# FAIL
Slide 44
Slide 44 text
user = Factory.create(:user)
3.times do
Factory(:album, :user => user)
end
Factory(:paid, :user => user)
assert user.albums.count == 4
# SUCCESS
Slide 45
Slide 45 text
Not DRY
Slide 46
Slide 46 text
Proposal:
Fixture w/ Fixture
Replacement
Slide 47
Slide 47 text
Test Context Arrangement Recipebook
Slide 48
Slide 48 text
First, Use Fixture.
Complex, Then Use
Fixture Replacement.