我正在尝试编写一个Rspec测试来测试我在Rails中的一个控制器,但是我在获取正确的params哈希时遇到了问题。
我的Activities Controller中的create方法如下所示(更新方法完全相同)。正如您所看到的,它接收的params散列有:activity,:start_time和:end_time hash。
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"}
当控制器收到它时,哈希看起来像
{"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 hash中。
{"activity"=>{"id"=>"1", "name"=>"Some Activity1", "start_time"=>{"hours"=>"1", "minutes"=>"0"}, "end_time"=>{"hours"=>"1", "minutes"=>"0"}}, "controller"=>"activities", "action"=>"create"}
感谢任何帮助或提示,感谢您的时间和帮助!!
答案 0 :(得分: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 }