代码之家  ›  专栏  ›  技术社区  ›  Luiz E.

“ghost”参数被传递给控制器

  •  0
  • Luiz E.  · 技术社区  · 6 年前

    我有以下测试:

    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>
    

    如您所见,宽度、高度和工作空间id都是 整数 正如他们应该做的那样,但由于验证,测试失败:

    Validator of Parameters - Unknown parameter document
    

    参数的最后一项是 document => 我根本没有提供。

    当我从 as: :json format: :json 现在 document param已消失(我想要),但所有其他参数都被解析为字符串:

    <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 使 文件 消失

    我正在使用Rails 5.2.0和RSpec 3.8.0

    0 回复  |  直到 5 年前
        1
  •  0
  •   Greg    5 年前

    你为什么这么想 :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的bug。