DesignAssembler

備忘録に近い

【gem】FactoryGirl

FactoryGirlはRailsのgemで、テストデータの作成をしてくれます。

テストアプリケーションはdeviseを使ってユーザー登録できるようにしてます。

Gemfileに以下を記述してください

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

以下のファイルを追加してください。 spec/factries/user.rb

FactoryGirl.define do
  factory :user do
    name  "useraaa"
    email "exampleaaa@example.com"
    password "exampleaaa"
  end
end

次に、このFactoryGirlを実行します。railsコンソールに入って以下を実行します。

2.1.6 :010 >   FactoryGirl.create(:user)

   (0.2ms)  begin transaction
  User Exists (0.5ms)  SELECT  1 AS one FROM "users" WHERE "users"."email" = 'exampleaaa@example.com' LIMIT 1
  SQL (1.2ms)  INSERT INTO "users" ("name", "email", "encrypted_password", "created_at", "updated_at") VALUES (?, ?, ?, ?, ?)  [["name", "useraaa"], ["email", "exampleaaa@example.com"], ["encrypted_password", "$2a$10$ySmHMDq8rrZJnVXuTAe5JemQIaXaBSTKsSzoSQztB8m605Swmee8G"], ["created_at", "2016-02-22 07:36:30.942918"], ["updated_at", "2016-02-22 07:36:30.942918"]]
   (0.6ms)  commit transaction
 => #<User id: 5, name: "useraaa", created_at: "2016-02-22 07:36:30", updated_at: "2016-02-22 07:36:30", email: "exampleaaa@example.com", encrypted_password: "$2a$10$ySmHMDq8rrZJnVXuTAe5JemQIaXaBSTKsSzoSQztB8m...", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 0, current_sign_in_at: nil, last_sign_in_at: nil, current_sign_in_ip: nil, last_sign_in_ip: nil>

rspecで使う場合

Gemfileに以下を記述してbundle install

#Gemfile
group :development, :test do
  gem 'rspec-rails'
end

そしてrails g rspec:installします。

$ rails g rspec:install
      create  .rspec
      create  spec
      create  spec/spec_helper.rb
      create  spec/rails_helper.rb

spec/examplesにテストコードを追加していきます。

spec/examples/factory_girl_spec.rb

#spec/examples/factory_girl_spec.rb
require 'rails_helper'

user1 = FactoryGirl.build(:user, name: "user1")
user2 = FactoryGirl.build(:user, name: "user2")

RSpec.describe ApplicationHelper, :type => 'helper' do
  describe "use_factory_girl" do

    it 'should be user1 and user2' do
      expect(user1.name).to eq "user1"
      expect(user2.name).to eq "user2"
    end
  end
end

これでbundle exec rakeすればテストが実行されます。

参考

File: GETTING_STARTED — Documentation for factory_girl (4.5.0)

qiita.com