fabricators

定义时 Defining Fabricators

Arguments

第一个 参数 是你所想要的 fabricating 对象或者是其 关联(associations)… …以 符号:类名的形式给出。

class Person; end

Fabricator(:person)

如果想使用与类名不同的名字,你必须以 ` :from => :symbolized_class_name` 的形式指定第 2 个参数。

Fabricator(:adult, :from => :person)

:from 的值可以是其它的类名 或者 另一个 fabricator

Attributes

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

Associations

belongs_to

Fabricator(:person) do
  vehicle
end

这下面的相等:

Fabricator(:person) do
  vehicle { Fabricate(:vehicle) }
end
``` ruby
``` ruby
``` ruby

使用时 Fabricating Objects

Callbacks

区别于‘平常’对象的 callbacks

on_init

Fabricator(:location) do
  on_init { init_with(30.284167, -81.396111) }
end

after_buildafter_create

Fabricator(:place) do
  after_build { |place| place.geolocate! }
  after_create { |place| Fabricate(:restaurant, :place => place) }
end

Building

区别于 ORM 的 save 方法, 你既想用此对象又不想 ‘真正’ 的保存到 DB,可以用 Fabricate.build

Fabricate.build(:person)

Sequences

Fabricate.sequence
# => 0
# => 1
# => 2
``` ruby
Fabricate.sequence(:name)
# => 0
# => 1
# => 2
``` ruby
Fabricate.sequence(:number, 99)
# => 99
# => 100
# => 101

上面 3 个看不懂不要紧,但下面这两个很重要!

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]">

你可能感兴趣的:(fabricators)