【问题标题】:Rspec unexpected keyword_end, expecting '}'Rspec意外的keyword_end,期待'}'
【发布时间】:2015-09-05 10:50:47
【问题描述】:

效果很好:

post :create, params_with_product

还有:

 put :update, id:@item, item: params_with_product

但是当我这样做时,它会因语法错误而失败,unexpected keyword_end, expecting '}'

put :update, :id => @item.id, params_with_product

地点:

let(params_with_product) { item: FactoryGirl.attributes_for(:item_without_product) }

【问题讨论】:

    标签: ruby-on-rails ruby rspec


    【解决方案1】:

    试试put :update, { :id => @item.id }.merge(params_with_product)

    【讨论】:

      【解决方案2】:

      只需加上 djaszczurowski 的正确答案即可。

      对于request spec,您必须发送params 哈希(key: value 对)作为请求的参数,其中value 本身可以是哈希。因此,postput 方法可以将 params 哈希作为参数。

      在您的第一种情况下,它起作用了:

      post :create, params_with_product
      

      因为params_with_product 是一个哈希(有效的key: value 对)

      但是,在第二种情况下:

      put :update, :id => @item.id, params_with_product
      

      它失败了,因为第二个参数没有任何key。 因此,您可以将:id => @item.id 与再次返回哈希的params_with_product 合并(有效的key: value 对)并且工作正常。

      【讨论】:

      • @K M Rakibul Islam,稍微更新了我的问题,当id: @item, item: param_with_product 是一个哈希值时,为什么这个不是?我不明白那部分。
      • put :update, id:@item, item: params_with_product 有效,因为您的两个参数都有 key => value 对。但是,put :update, :id => @item.id, params_with_product 失败,因为第一个参数有 key => value 对,但第二个参数没有。因此,您必须将所有参数作为key: value 对发送,或者您可以将它们合并到一个包含所有key: value 对的哈希中。希望这可以帮助。如果您还有其他问题,请告诉我。谢谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多