2016-08-11 25 views
0

我的控制器操作在開發環境中執行我想要的操作,並且當我在測試環境中使用byebug按照流程操作時 - 操作按照我想要的進行,但通過控制器操作中的update_column更新屬性 - 當我回到我的規範時不會持續。請參閱下面我已經嘗試的上下文。Rspec/Rails4,對象屬性更新沒有持續在控制器規格?

控制器動作: 正如我上面所述,這個動作實際上確實按預期更新了事件列。

def swap 
    # TODO 
    # Maybe change :event_ids to 'swap_event_ids?' 
    if params[:event_ids] 
     @swapped_events = params[:event_ids].map{|id| Event.find(id.to_i)} 
     byebug 
     @swapped_events.each do |event| 
      event.update_columns(driver_id: nil) 
      event.update_columns(swap_requester_id: current_user.id) 
      event.save 
     end 
     byebug 

     flash[:notice] = "Successfully added #{@swapped_events.length} events to swap stack" 
     redirect_to(:back) 
    else 

     flash[:alert] = "Please select one of your events before clicking Swap!" 
     redirect_to(:back) 
    end 
end 

該規範:在返回規範後,在發佈請求後,更新的列沒有持續。 I.E,event.driver_id列仍然設置爲subject.current_user.id。

describe 'POST #swap' do 
    login_user 

    before do 
     request.env['HTTP_REFERER'] = 'http://localhost:3000' 
    end 

    it '#swap changes driver_id to nil for selected swap request events' do 
     events = FactoryGirl.create_list(:event, 2, driver_id: subject.current_user.id) 
     post :swap, event_ids: ["#{events[0].id}", "#{events[1].id}"] 
     expect(events.all?{|event| event.driver == nil}).to eq true 
    end 

end 

我不知道我是缺少在這裏..

回答

1

您需要reload記錄從數據庫中,如果你在改變想檢查:雖然

events.map(&:reload) 

簡單的爲了我會去這樣的事情:

expect(Event.where(driver_id: nil).count).to eq 2 
+0

謝謝你,作品! – matthewalexander

相關問題