【发布时间】:2016-12-10 00:04:09
【问题描述】:
我的应用程序有一个控制器规范,用于测试控制器上的 create 方法。创建操作实际上工作正常,但规范失败。似乎它正在自动将哈希 POST 参数转换为字符串。
let(:coupon) { attributes_for(:coupon) }
describe 'POST #create' do
it 'should create a new coupon from params' do
expect {
post :create, :coupon => coupon
}.to change(Coupon, :count).by(1)
end
end
现在,如果我执行puts coupon,它会生成一个有效的数据散列,并且类型是散列。由于某种原因,控制器正在接收 params[:coupon] 的字符串。只有在 rspec 测试中才会发生这种情况,当我在浏览器中使用 POST 表单进行测试时,它工作得非常好。
Rspec 抛出以下消息:
NoMethodError:
undefined method `permit' for #<String:0x00000005062700>
Did you mean? print
如果我在 rspec 的控制器中执行puts params[:coupon].class,它会给我字符串。为什么它会将我的哈希转换为 POST 请求的字符串,我该如何防止这种情况发生?
我正在使用 Rails 5.0.0 和 rspec 3.5.1
【问题讨论】:
标签: ruby-on-rails ruby hash rspec ruby-on-rails-5