我有以下测试:
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均为应为integer,但由于验证而导致测试失败:
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中使用
您为什么认为: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的错误。