今更ながらrspecとfactory_girlを使ってのテスト書き方
今更ですが、factory_girlでテストを書く時の記述例を示します。
18 require 'spec_helper' 19 20 describe User do 21 22 let!(:user1) { FactoryGirl.create(:current_user) } 23 let!(:auth_provider1) { FactoryGirl.create(:current_user_auth_provider, user: user1) } 24 let!(:photo1) { FactoryGirl.build(:current_user_photo1, user: user1) } 25 let!(:photo2) { FactoryGirl.build(:current_user_photo1, user: user1) } 26 let!(:photo3) { FactoryGirl.build(:current_user_photo1, user: user1) } 27 let!(:photo4) { FactoryGirl.build(:current_user_photo1, user: user1) } 28 let!(:photo5) { FactoryGirl.build(:current_user_photo1, user: user1) } 29 30 describe "check user photos" do 31 fixtures :photos 32 33 context "check user photo" do 34 before do 35 @user = user1 36 end 37 it "check photo" do 38 expect(@user.photos).not_to be_nil 39 end 40 it "photo count" do 41 expect(@user.photos.count).to eql(Photo.where(user_id: @user.id).count) 42 end 43 end 44 end 45 46 describe "group member" do 47 fixtures :groups 48 49 context "user join the group" do 50 before do 51 @current_user = user1 52 @group = Group.find(1) 53 end 54 it "group " do 55 @current_user.groups << @group 56 expect(@current_user.save).to be_truthy 57 @user = User.find(@current_user.id) 58 expect(@user.groups.size).to eql(1) 59 end 60 end 61 end 62 63 describe "group save test" do 64 context "group save error check" do 65 before do 66 end 67 it "save test" do 68 @group = Group.new 69 expect(@group).not_to be_valid 70 expect(@group.errors_on(:name).size).to eq(1) 71 end 72 end 73 end 74 end
実際factory_girlでテストデータを作成しているところはspec/factories/users.rbで
1 FactoryGirl.define do 2 factory :current_user, class: User do 3 name 'test_user' 4 email 'test@gmail.com' 5 end 6 end
ちなみに話変わりますが、paperclipを使って画像アップロードしていたのですが、versionが4系になってから今までのテストが通らなくなりました。
「Paperclip::Errors::MissingRequiredValidatorError.」と出てしまいます。何かモデルにバリデーションを追加しろという情報があるようなので、やりましたら動かなかったです(やり方が違う??)
補足2/14 has_attached_fileメソッドの後にvalidates_attachment_content_typeを定義すること