1

accepts_nested_attributes_forを使用するように私のスパゲッティコードを変換するとき、私はRSpec統合テストを書いています。私はこのようなスニペットがあります。もちろんRSpec統合テストでネストされた属性をPOSTする方法は?

# file: spec/requests/wizard_spec.rb 
describe 'POST /wizard with address' do 
    before(:each) do 
    @premise_attributes = { 
     "address"=>"600 Mellow Ave, Mellow Park, CA 94025, USA", 
    } 
    end 
    it 'should succeed' do 
    post :create, "wizard" => { "premise_attributes" => @premise_attributes } 
    response.status.should be(200) 
    end 
end 

を、これはで失敗します。

Failure/Error: post :create, "wizard" => { "premise_attributes" => @premise_attributes } 
ArgumentError: 
    bad argument(expected URI object or URI string) 

はPOST-可能な形式にネストされた属性のハッシュを変換する方法はありますか?

(関連はあまり重要:?どこpost方法を文書または定義されている、私はそれが本当に引数として受け入れるか見てみたいと思います。)

答えて

1

代わりpost :createdescribe WizardController do; endブロック内post "/wizard"や巣あなたのスペックを使用してみてください。通常、指定されたコントローラーの記述ブロック内にある場合にのみ、method :action構文を使用できます。

0

putをテストしようとすると問題を解決しようとしていますが、これが見つかりました。私のpostメソッドは動作しますが、多分あなたがまだそれを必要とするならば、私はあなたを助けることができます。あなたの問題は、スカラー型の変数のように属性を更新しようとしていることですが、ネストされた属性は実際には配列のようなものです。 Railsは一般的にそれらに "0"、 "1"などの名前を付けますが、名前がユニークである限り重要であるかどうかは分かりません。

@premise_attributes = { 
    "0" => {"address"=>"600 Mellow Ave, Mellow Park, CA 94025, USA"} 
} 

(それは私のアドレスのようなものは、あなたの例を借りることが一意ではないと言うのでちなみに、私がいる問題は、私のupdate仕様が失敗しているということです。)

:これを試してみます
関連する問題