2

次のコードを使用して、RSPEC で multipart/form 投稿をテストしようとしています。

@req = { :post => @attr }
  lambda {
    post :create, :POSTDATA => @req, :format => :json
  }.should change(Post, :count).by(1)

しかし、次のエラーが表示されます。

undefined method `stringify_keys' for "post":String

POSTDATA は、マルチパート フォーム名です。

マルチパートリクエストをテストする正しい方法は何ですか?

編集:

上記のようにリクエストを作成すると、ネストされた JSON リクエストが作成されるだけであることがわかりました。マルチポスト/フォームリクエストを作成するにはどうすればよいですか?

次のようなマルチパート リクエストを作成したいと考えています。

POST /api/posts.json HTTP/1.1
Accepts: application/json
X-API-KEY: 7d867d16a5e25337b6d7857965f812bee73b76ac
Content-Length: 288
Content-Type: multipart/form-data; boundary=syoYQUQsGwI2XqShQimFdv2QSe-_GYbjVx40T1kS
Host: 10.0.2.2:3000
Connection: Keep-Alive
User-Agent: Apache-HttpClient/UNAVAILABLE (java 1.4)

--syoYQUQsGwI2XqShQimFdv2QSe-_GYbjVx40T1kS
Content-Disposition: form-data; name="POSTDATA"
Content-Type: application/json; charset=UTF-8
Content-Transfer-Encoding: 8bit

{"tags":["dffdff"],"location_id":3,"post":{"content":"test #dffdff"}}
--syoYQUQsGwI2XqShQimFdv2QSe-_GYbjVx40T1kS--
4

1 に答える 1

0

ハッシュだけを転送しながら、新しいオブジェクト(createメソッド)を作成しようとしていると思います。

試す :

 post :create, {:model_name => {hashed_parameter}, :format => :json }

また、定数 POSTDATA にしないでください。単純に :post_data を使用してください。

また、Factory Girl を使用して object を作成し、 test に使用することも提案します。

于 2012-04-16T10:38:33.003 に答える