Tbpgr Blog

Ruby プログラマ tbpgr(てぃーびー) のブログ

Factory Girl| シーケンスで連番データを作成

概要

シーケンスで連番データを作成

内容

ユニーク制約の付いている列など、同一のテストデータを利用できない場合に
シーケンスを利用することで制約を回避出来ます。

sequence(:login) {|n|"login_#{n}"}

サンプル

下記記事のサンプルを少し編集してみました。
Factory Girl | インストール
http://d.hatena.ne.jp/tbpg/20130715/1373897239

spec/factories/books.rb
# Read about factories at https://github.com/thoughtbot/factory_girl

FactoryGirl.define do
  factory :book1, :class => Book do
    name "The RSpec Book"
    isbn "9784798121932"
    price 4200
  end
  factory :book2, :class => Book do
    # name "リファクタリング:Rubyエディション"
    sequence(:name) {|n|"リファクタリング:Rubyエディション#{n}"}
    # isbn "9784048678841"
    sequence(:isbn) {|n|"978404867884#{n}"}
    price 4800
  end
end
テスト対象コード
class BookController < ApplicationController
  def list
    @books = Book.all
  end
end
テストコード

book_controller.rb

require 'spec_helper'
require 'pp'

describe BookController do

  describe "GET 'list'" do
    it "returns http success" do
      # @book1 = build(:book1)
      # @book2 = build(:book2)
      @book1 = create(:book1)
      @book2_1 = create(:book2)
      @book2_2 = create(:book2)

      pp @book1
      pp @book2_1
      pp @book2_2

      puts Book.all.size

      get 'list'

      response.should be_success
    end
  end
end
実行結果

※標準出力部のみ抜粋

#<Book id: 8, name: "The RSpec Book", isbn: "9784798121932", price: 4200, created_at: "2013-07-17 13:36:21", updated_at: "2013-07-17 13:36:21">
#<Book id: 9, name: "リファクタリング:Rubyエディション1", isbn: "9784048678841", price: 4800, created_at: "2013-07-17 13:36:21", updated_at: "2013-07-17 13:36:21">
#<Book id: 10, name: "リファクタリング:Rubyエディション2", isbn: "9784048678842", price: 4800, created_at: "2013-07-17 13:36:21", updated_at: "2013-07-17 13:36:21">