概要
シーケンスで連番データを作成
内容
ユニーク制約の付いている列など、同一のテストデータを利用できない場合に
シーケンスを利用することで制約を回避出来ます。
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">