2015-09-05 92 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。希望這可以幫助。如果您有任何其他問題,請告訴我。謝謝。 –

相關問題