Factory Girl 是专门用来构造模拟测试数据的,第一次使用还是在学习ruby on rails tutorial。
生成大量数据可以用association来解决对象间的关联,sequence来解决生成大量测试数据的问题。
添加 Factory Girl
Gemfile
group :test do
gem 'factory_girl_rails', '1.4.0'
end
可以修改spec_helper.rb,禁用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_name]s.rb
在rspec中三种常见写法
user = Factory(:user) #相当于new+save!
user = Factory.create(:user) #同上,是全写
user = Factory.build(:user, :username => 'rob') #只有new没有save
如在rails tutorial 中的使用方式:
# spec/factories.rb
Factory.define :user do |user|
user.name "Michael Hartl"
user.email "mhartl@example.com"
user.password "foobar"
user.password_confirmation "foobar"
end
Factory.sequence :email do |n|
"person-#{n}@example.com"
end
Factory.define :micropost do |micropost|
micropost.content "Foo bar"
micropost.association :user
end
在Rspec中的调用方法
post = Factory(:post)
其实上面代码相当于:
user = User.new
user.email = "test@example.com"
user.save!
post = Post.new
post.title = "Hello"
post.user = user post.save!
更多请参考:factory_girl