2016-08-11 52 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