0

我在进行 RSPec 测试时遇到问题。测试对请求中的一些对象执行 PUT。接收 PUT 的控制器似乎没有得到正确的值

例如,'put :update, :id => @channel.id, :channel => @channel, :tags => @tag' 然后,在控制器中,当我尝试使用 params[:tags] 时,会有一个该位置的整数。带有规范和控制器方法的要点位于https://gist.github.com/3715021

当我从 Rails 3.0.13 升级到 3.1.8 时,这种情况开始发生

知道这里可能会发生什么以及如何解决吗?

4

2 回答 2

0

我假设这@tag是您的 Tags 模型中的一个对象。当你给 Rails 一个像

`get :action, :foo => foo`

或在 url 助手中(例如,foo_path(foo)),

Rails 将通过该方法将您的对象转换为适合在 url 中使用的参数#to_param。你可能得到一个整数,因为Tag#to_param返回你的数据库中标签的 id。

相比之下,您的更新操作看起来像是params[:tags]一个散列,大概是从一个包含诸如tags[:name].

如果不了解更多相关代码,我将无能为力。但我猜你想要做的是改变你的测试阅读

put :update, :id => @channel.id, :channel => @channel, :tags => { :name => 'tag' }

或类似的东西,通过实际提交 PUT 到更新操作的表单来模仿您获得的参数。

于 2012-09-21T14:02:27.573 回答
0

这很难为您提供帮助,因为我们不知道您要做什么。例如,如果您显示更多的测试(例如,您设置为变量的值)和测试的具体结果,将会很有帮助。

无论如何,@tags 变量是 arel 对象吗?如果是这样,您是否希望将 ID 作为要传递的值?如果没有,那么您可能想要指定@tags 中引用的属性。例如,@tags.name... 或者,@tags 本身是否引用哈希?

于 2012-09-21T01:36:19.733 回答