我正在尝试编写一个 Rspec 测试来测试我在 Rails 中的一个控制器,但是我在获取正确的参数哈希时遇到了问题。
我的活动控制器中的创建方法如下所示(更新方法相同)。如您所见,它接收到的 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"}
当控制器收到它时,哈希看起来像
{"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"}
感谢您提供任何帮助或提示,感谢您的时间和帮助!