FactoryGirl

上一篇 / 下一篇  2016-07-27 11:48:47 / 个人分类:学习交流

Fixtures 是用来测试用的,是一些数据的例子。
每一个model一个fixture文件,放在 ActiveSupport::TestCase.fixture_path=(path). 如果使用rails, 直接把fixture文件放在rails-app/test/fixtures/文件要以.yml作为扩展名use_transactional_fixtures = true

FactoryGirl 也是专门用来构造模拟测试数据的,替代Fixture。 FactoryGirl 可以用association来解决对象之间的关联,sequence来解决生成大量测试数据的问题。
  • 每个model都定义一个factory
  • 如果model比较少就把所有的factory定义到一个文件spec/factories.rb
  • 如果model比较多,就在spec/factories/下为每个model建立一个文件

在rspec中有三种常见的用法:
  • user = Factory(:user) # new+save
  • user = Factory.create(:user) # new+save
  • user = Factory.build(:user, :username => 'camel') # new
一个demo
FactoryGirl.define do
  factory :project do
    sequence :name do |n|
      "test project #{n}"
    end

    description 'Factory project description'
    repo_url 'git@xxx.com'
  end
end
FactoryGirl.define do
  factory :category do
    project
    sequence :title do |n|
      "test category #{n}"
    end

    type_cd 'PLAN_CATEGORY'
  end
end

new_category = FactoryGirl.build(:category)
翻译为:
project = new Project
category = new Category
category.project = project

------------------
FactoryGirl.create_list(:category, 3) # create 3
FactoryGirl.create(:category, title: 'new title')

TAG:

 

评分:0

我来说两句

Open Toolbar