2013-03-03 74 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