2016-12-28 48 views
0

我想在Decidingscontroller中測試#create,並且決定模型具有與Undertaking模型關聯的undertaking_id列,並且具有與Asking關聯的ask_id列模型。 所以,我的工廠/ decidings.rb在下面。Factorygirl,我無法表示1對1(has_one)與rspec的關聯

factory :deciding do 
     after(:build) do |deciding| 
     deciding.asking ||=build(:asking, deciding: deciding) 
     deciding.undertaking ||=build(:undertaking, deciding: deciding) 
     end 
    end 

和我的spec/controllers/decidings_controller_spec.rb在下面。

 RSpec.describe DecidingsController, type: :controller do 
     describe '#create' do 
     before do 
     @deciding=build(:deciding) 
     end 
     context 'correct_user login' do 
     before do 
      login_user(@deciding.asking.user) 
     end 
     it 'creates with deciding +1' do 
      expect{post :create , undertaking_id: @deciding.undertaking_id , asking_id: @deciding.asking_id}.to change(Deciding , :count).by(1) 
     end 
     end 
    end 
    end 

但是@deciding在這種情況下是如下。

#<Deciding id: nil, asking_id: nil, undertaking_id: nil, created_at: nil, updated_at: nil> 

所以我不能創建測試,因爲undertaking_id和asking_id是零。 爲什麼undertaking_id和asking_id無?請幫助我... 無論如何,我的工廠/ ask.rb在下面。

FactoryGirl.define do 
    factory :asking do 
     association :user 
     sequence(:content){|i| "お願いします#{i}"} 
    end 
    end 
+0

您應該使用',而不是'has_one' belongs_to'關聯。但是,由於您沒有展示您的模型,因此無法確切說出。 – iSunRise

回答

2

因爲記錄沒有被保存,所以ID爲零。當您使用build方法時,它不會保存數據庫中的記錄。如果記錄未保存,則不能有ID。改用create方法。

試試這個:

factory :deciding do 
    after(:build) do |deciding| 
    deciding.asking ||= create(:asking) 
    deciding.undertaking ||= create(:undertaking) 
    end 
end 
+0

哦,它的工作原理!謝謝! –

相關問題