2015-09-05 98 views
-4

它工作正常:Rspec的意外keyword_end,期待 '}'

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) } 

回答

3

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

+0

这是正确的。 –

1

只是增加与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.idparams_with_product,它会再次返回一个散列(有效的key: value对)并且工作正常。

+0

@K M Rakibul伊斯兰教,更新了我的问题一点,当id:@item,item:param_with_product'是一个散列,那么为什么这个不会是?我不明白那一部分。 – sadaf2605

+0

'put:update,id:@item,item:params_with_product' works because you have'key = value value' pair for both params。但是,'put:update,:id => @ item.id,params_with_product'会失败,因为第一个param有'key => value'对,但第二个参数不是。所以,要么你必须发送所有的参数作为'key:value'对,要么你可以将它们合并成一个包含所有'key:value'对的hash。希望这可以帮助。如果您有任何其他问题,请告诉我。谢谢。 –

相关问题