我遇到了RSPec测试的麻烦。测试在请求中使用一些对象执行PUT。接收PUT的控制器似乎没有得到正确的值
例如,'put:update,:id => @ channel.id,:channel => @channel,:tags => @tag'然后,在Controller中,当我尝试使用params [:tags]时,该位置有一个整数。 Spec和控制器方法的要点是https://gist.github.com/3715021
当我从Rails 3.0.13升级到3.1.8
时,就开始发生这种情况了知道这里可能会发生什么以及如何解决它?
答案 0 :(得分:0)
这很难帮助你,因为我们不知道你要做什么。例如,如果您展示了更多的测试(例如,您设置为变量的值)和测试的特定结果,那将会很有帮助。
无论如何,@ targs变量是一个arel对象吗?如果是这样,您是否期望将ID作为要传递的值?如果没有,那么您可能想要指定@tags中引用的属性。例如,@ tags.name ...或者@tags是否引用哈希本身?
答案 1 :(得分:0)
我假设@tag
是您的Tags模型中的对象。当你为Rails提供像
`get :action, :foo => foo`
或在网址助手中(例如foo_path(foo)
),
Rails会通过#to_param
方法将您的对象转换为适合在网址中使用的参数。你可能得到一个整数,因为Tag#to_param
返回数据库中标记的id。
相比之下,您的更新操作似乎需要params[:tags]
为哈希,可能是从包含tags[:name]
等值的字段的表单生成的。
如果不了解相关代码的更多信息,我将无法提供更多帮助。但我猜你想要做的是改变你的测试阅读
put :update, :id => @channel.id, :channel => @channel, :tags => { :name => 'tag' }
或类似的东西,通过实际提交PUT到您的更新操作的表单来模仿您获得的参数。