The girl is hot who works in a Factory (Rails 中代替fixture的factory_girl)

Factory Girl 是專門用來構造模擬測試數據的,完美替代Fixture的工具。
Fixture的缺點很明顯,經常要處理各種關聯和依賴。如果測試要求的數據量大,還要自己手動製造數據。這些在Factory Girl中都有了好的解決。生成大量數據可以用association來解決對象間的關聯,sequence來解決生成大量測試數據的問題。

添加Factory Girl

#Gemfile
group :development, :test do
  gem 'factory_girl_rails'
end

最好修改spec_helper.rb,把fixture_path這一行註釋掉,禁用Fixture

# /spec/spec_helper.rb
# config.fixture_path = "#{::Rails.root}/spec/fixtures"

Factory Girl使用原則

1、每個model都定義一個factory。
2、如果model比較少就把所有的factory定義放到一個文件spec/factories.rb中。
如果model比較多且複製,則每上model在spec/factories/目錄下單獨建立一個文件[model_names]s.rb

在rspec中三種常見寫法

user = Factory(:user)	#相當於new+save!
user = Factory.create(:user)	#同上,是全寫
user = Factory.build(:user, :username => 'camel')	#只有new沒有save

一個例子

#spec/factories.rb
FactoryGirl.define do
  factory :user do
    sequence(:email){|n| "email#{n}@factory.com" }
    password "888888"
    password_confirmation "888888"
  end

  factory :post do
	  title "Hello"
	  association :user
	  #association :author, :factory => :user	#關聯另一個用戶,同時定義一個別名。
	end
end

在Rspec中調用方法

post = Factory(:post)

其實上面代碼相當於:

user = User.new
user.email = "[email protected]"
user.save!
post = Post.new
post.title = "Hello"
post.user = user
post.save!

更多請參考:https://github.com/thoughtbot/factory_girl

>>原創文章,歡迎轉載。轉載請註明:轉載自Ruby迷,謝謝!
>>原文鏈接地址:Factory Girl使用方法的一些彙總
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章