2013-03-03 73 views
0

我想寫一個Rspec測試來測試我的控制器在Rails中的一個,但我有一個問題得到正確的參數散列。Rails Rspec/FactoryGirl沒有傳遞正確的參數到控制器

我的活動控制器中的創建方法如下所示(更新方法相同)。正如你可以看到它收到的params散列有:activity,:start_time和:end_time散列。

def create 
    @activity = Activity.new(params[:activity]) 
    @activity.start_time = to_interval(params[:start_time]) 
    @activity.end_time = to_interval(params[:end_time]) 
    respond_to do |format| 
.... 

RSpec的活動控制器的規格看起來像

it "redirects to the activity" do 
    activity = Activity.create! valid_attributes 
    put :update, :id => activity.id, :activity => valid_attributes 
    response.should redirect_to(activity) 
    end 

第二行調用有效的屬性

def valid_attributes 
    FactoryGirl.attributes_for(:activity) 
end 

它返回一個哈希

{"id"=>"1", "name"=>"Some Activity1"} 

,並在控制器recei它看起來像哈希看起來像

{"activity"=>{"id"=>"1", "name"=>"Some Activity1"}, "controller"=>"activities", "action"=>"create"} 

正如你可以看到:start_time和:end_time哈希丟失。最後,我需要一個哈希看起來像

{"activity"=>{"id"=>"1", "name"=>"Some Activity1"}, "start_time"=>{"hours"=>"1", "minutes"=>"0"}, "end_time"=>{"hours"=>"1", "minutes"=>"0"}, "controller"=>"activities", "action"=>"create"} 

我不能添加找出正確的語法:START_TIME和END_TIME:哈希到params哈希表。我無法將它與從FactoryGirl返回的散列組合在一起,因爲create方法將三個散列組合到下面的表單中,因爲現在:start_time和end_time嵌入在:activities散列中。

{"activity"=>{"id"=>"1", "name"=>"Some Activity1", "start_time"=>{"hours"=>"1", "minutes"=>"0"}, "end_time"=>{"hours"=>"1", "minutes"=>"0"}}, "controller"=>"activities", "action"=>"create"} 

任何幫助或提示的讚賞,我感謝你的時間和幫助!

回答

0

我在代碼中發現一些奇怪的東西。您正在嘗試put :update,但您正在查看創建操作(這可能也是導致此問題的一些問題,您對創建操作的測試可能已經有了參數。)

對於您的問題,您應該能夠做到這一點,通過start_time和end_time參數

put :update, :id => activity.id, :activity => valid_attributes, :start_time => { :hour => 1, :minute => 2 }, :end_time => { :hour => 1, :minute => 2 } 
+0

謝謝!!它從字面上看就像這樣簡單。我只是因爲某種原因沒有看到它。 – 2013-03-03 05:20:38