RSpec 控制器测试将散列转换为字符串
RSpec Controller test converting hash into String
我的应用程序有一个控制器规范,它测试控制器上的创建方法。创建操作实际上工作正常,但规范失败了。似乎它正在自动将散列 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
我最近在测试 JSON API 端点时出现了完全相同的行为。本来我的主题是这个:
subject { put :my_endpoint, **input_args }
input_args
中的一个整数值被翻译成一个字符串。解决方法是将 format: 'json'
作为附加关键字参数添加到 put
:
subject { put :my_endpoint, **input_args, format: 'json' }
这似乎是 gem open_taobao
以某种方式在测试中转换我的 post 请求的问题。
我的应用程序有一个控制器规范,它测试控制器上的创建方法。创建操作实际上工作正常,但规范失败了。似乎它正在自动将散列 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
我最近在测试 JSON API 端点时出现了完全相同的行为。本来我的主题是这个:
subject { put :my_endpoint, **input_args }
input_args
中的一个整数值被翻译成一个字符串。解决方法是将 format: 'json'
作为附加关键字参数添加到 put
:
subject { put :my_endpoint, **input_args, format: 'json' }
这似乎是 gem open_taobao
以某种方式在测试中转换我的 post 请求的问题。