第一个 参数 是你所想要的 fabricating 对象或者是其 关联(associations)… …以 符号:类名的形式给出。
class Person; end
Fabricator(:person)
如果想使用与类名不同的名字,你必须以 ` :from => :symbolized_class_name
` 的形式指定第 2 个参数。
Fabricator(:adult, :from => :person)
:from 的值可以是其它的类名 或者 另一个 fabricator
Fabricator(:person) do
name 'Greg Graffin'
profession 'Professor/Musician'
end
``` ruby
Fabricator(:person) do
name { Faker::Name.name }
profession { %w(Butcher Baker Candlestick\ Maker).sample }
end
``` ruby
Fabricator(:person) do
name { Faker::Name.name }
email { |person| "#{person.name.parameterize}@example.com" }
end
belongs_to
Fabricator(:person) do
vehicle
end
这下面的相等:
Fabricator(:person) do
vehicle { Fabricate(:vehicle) }
end
``` ruby
``` ruby
``` ruby
区别于‘平常’对象的 callbacks
on_init
Fabricator(:location) do
on_init { init_with(30.284167, -81.396111) }
end
after_build
和 after_create
Fabricator(:place) do
after_build { |place| place.geolocate! }
after_create { |place| Fabricate(:restaurant, :place => place) }
end
区别于 ORM 的 save
方法, 你既想用此对象又不想 ‘真正’ 的保存到 DB,可以用 Fabricate.build
Fabricate.build(:person)
Fabricate.sequence
# => 0
# => 1
# => 2
``` ruby
Fabricate.sequence(:name)
# => 0
# => 1
# => 2
``` ruby
Fabricate.sequence(:number, 99)
# => 99
# => 100
# => 101
Fabricate.sequence(:name) { |i| "Name #{i}" }
# => "Name 0"
# => "Name 1"
# => "Name 2"
``` ruby
Fabricate(:person) do
ssn { sequence(:ssn, 111111111) }
email { sequence(:email) { |i| "user#{i}@example.com" } }
end
# => <Person ssn: 111111111, email: "[email protected]">
# => <Person ssn: 111111112, email: "[email protected]">
# => <Person ssn: 111111113, email: "[email protected]">