我进行了以下测试:
it 'will pass with valid pageConfig json structure' do
document = create(:document, :complete, :belongs_to_user, user_id: @user.id, workspace_id: @workspace.id)
put :update, params: {id: document.id, pageConfig: {size: {width: 1, height: 1}, margin: {top: 1, bottom: 1, left: 1, right: 1}}, workspace_id: @workspace.id}, as: :json
expect(document.reload.page_config).to eq({"size": {"width": 1, "height": 1}, "margin": {"top": 1, "left": 1, "right": 1, "bottom": 1}})
end
调试update
端点时,这些参数是:
<ActionController::Parameters {"pageConfig"=>{"size"=>{"width"=>1, "height"=>1}, "margin"=>{"top"=>1, "bottom"=>1, "left"=>1, "right"=>1}}, "workspace_id"=>1, "id"=>"1", "format"=>"json", "controller"=>"documents", "action"=>"update", "document"=>{"workspace_id"=>1}} permitted: false>
如您所见,宽度,高度和workspace_id均应为整数,但由于验证而导致测试失败:
Validator of Parameters - Unknown parameter document
参数上的最后一个条目是document =>
,我根本没有提供。
当我从as: :json
更改为format: :json
时,document
参数消失了(我想要),但所有其他参数都解析为字符串:
<ActionController::Parameters {"pageConfig"=>{"margin"=>{"bottom"=>"1", "left"=>"1", "right"=>"1", "top"=>"1"}, "size"=>{"height"=>"1", "width"=>"1"}}, "workspace_id"=>"1", "id"=>"1", "format"=>"json", "controller"=>"documents", "action"=>"update"} permitted: false>
,现在其他验证失败,因为它们是字符串。
如何使用as: :json
使它工作并使document
消失?
我正在将Rails 5.2.0与RSpec 3.8.0一起使用
答案 0 :(得分:0)
您为什么认为:as
和:format
是排他性的?我做了一些测试
put '/', params: {id: 1000, pageConfig: {size: {width: 1, height: 1}, margin: {top: 1, bottom: 1, left: 1, right: 1}}, workspace_id: 10001}
{:action=>"/", :controller=>"redacted", :id=>1000, :pageConfig=>{:size=>{:width=>1, :height=>1}, :margin=>{:top=>1, :bottom=>1, :left=>1, :right=>1}}, :workspace_id=>10001}
put '/', params: {id: 1000, pageConfig: {size: {width: 1, height: 1}, margin: {top: 1, bottom: 1, left: 1, right: 1}}, workspace_id: 10001}, as: :json
{:action=>"/", :controller=>"redacted", :format=>:json, :id=>1000, :pageConfig=>{:size=>{:width=>1, :height=>1}, :margin=>{:top=>1, :bottom=>1, :left=>1, :right=>1}}, :workspace_id=>10001}
put '/', params: {id: 1000, pageConfig: {size: {width: 1, height: 1}, margin: {top: 1, bottom: 1, left: 1, right: 1}}, workspace_id: 10001}, format: :json
{:action=>"/", :controller=>"redacted", :format=>:json, :id=>1000, :pageConfig=>{:size=>{:width=>1, :height=>1}, :margin=>{:top=>1, :bottom=>1, :left=>1, :right=>1}}, :workspace_id=>10001}
如您所见,我从未遇到过这种“鬼”参数(尽管我在Rails-6.0.0上进行了测试)
我怀疑有一些时髦的宝石为您弄乱了东西。
您可以做什么:启动香草Rails应用程序,然后尝试重现它。如果不能-几乎可以肯定这是一些宝石。
如果可以的话-很有可能是Rails的错误。