Rspec のコントローラーのテストの写経をしています。 before で@contact というインスタンス変数をつくってテストをかいているのですが、参考書を見ているといつの間にかその変数が更新されていました。
① it "locates the requested @contact" とい exampleでは
assigns(:contact) と @contact が等しいことを確かめていますが、@contact の値ははFctoryGirl の値に変えられてしまったということで正しいですか?
② "changes @contact's attributes" という example ではなぜリロードしているのですか?リロードしなきゃ値が変わらないなら、一つ目の example では値が変わってないことになるのでとても奇妙に思えます。
よろしくお願いします。
ruby
1#spec/controllers/contacts_controller_spec.rb 2 3describe 'PATCH #update' do 4 before :each do 5 @contact = create(:contact, 6 firstname: 'Lawrence', 7 lastname: 'Smith') 8 end 9 10 # 有効な属性の場合 11 context "valid attributes" do 12 13 14 # 要求された@contact を取得すること 15 it "locates the requested @contact" do 16 patch :update, id: @contact, contact: attributes_for(:contact) 17 expect(assigns(:contact)).to eq(@contact) 18 end 19 20 21 # @contact の属性を変更すること 22 it "changes @contact's attributes" do 23 patch :update, id: @contact, 24 contact: attributes_for(:contact, 25 firstname: 'Larry', 26 lastname: 'Smith') 27 @contact.reload 28 expect(@contact.firstname).to eq('Larry') 29 expect(@contact.lastname).to eq('Smith') 30 end 31end 32
ruby
1#faactorygirl のデータ 2FactoryGirl.define do 3 factory :contact do 4 firstname "Tetsuya" 5 lastname "Mori" 6 sequence(:email) {Faker::Internet.email} 7 8 after(:build) do |contact| 9 [:home_phone, :work_phone, :mobile_phone].each do |phone| 10 contact.phones << FactoryGirl.build(:phone, phone_type: phone, contact: contact) 11 end 12 end 13 factory :invalid_contact do 14 firstname nil 15 end 16 end 17end
良かったらControllerのソースも添えていただけますか?