1

私の rspec テストでは、次のハッシュの配列を定義し、POST を実行しました。

body = {:event => { :invitations_attributes => 
  [ {:recipient_id => 40}, {:email => 'a@a.com'}, {:facebook_id => 123456789} ] } }
post "#{@url}.json", body.reverse_merge(:auth_token => @token)

上記に基づいて、Rails サーバーは "invitations_attributes" をハッシュの配列として受け取ると予想しました。ただし、developer.log ファイルには次の内容があります。

Parameters: {"auth_token"=>"RSySKfN2L8b5QPqnfGf7", "event"=>{"invitations_attributes"=>
[{"recipient_id"=>"40", "email"=>"a@a.com", "facebook_id"=>"123456789"}]}}

(上記のパラメーターでは、「invitation_attributes」配列にはハッシュが 1 つだけ含まれています。)

次の curl ステートメント:

curl -X POST -H "Content-type: application/json" http://localhost:3000/api/v1/events.json -d '{"auth_token":"RSySKfN2L8b5QPqnfGf7","event":{"invitation_attributes":[{"recipient_id":40},{"email":"a@a.com"},{"facebook_id":123456789}]}}'

以下のログ ファイル エントリからも明らかなように、Rails はハッシュの配列をそのまま受け取ります。

Parameters: {"auth_token"=>"RSySKfN2L8b5QPqnfGf7", "event"=>{"invitation_attributes"=>
[{"recipient_id"=>40}, {"email"=>"a@a.com"}, {"facebook_id"=>123456789}]}}

Rack/test は、PUT 操作と POST 操作でこの動作を示しています。

配列を定義どおりに正確に送信するのではなく、ラック/テストが 3 つのハッシュを 1 つに結合するのはなぜですか? ラックが期待どおりの動作を示す設定はありますか?

4

1 に答える 1

0

1 つの回避策は、次のように nil 値のプレースホルダー キーを挿入して、各ハッシュに各キーが含まれるようにすることです。

body = {:event => { :invitations_attributes => [
  {:recipient_id => 40, :recipient_email => nil, :recipient_facebook_id => nil},
  {:recipient_email => user.email, :recipient_id => nil, :recipient_facebook_id => nil}, 
  {:recipient_facebook_id => new_unused_facebook_id, :recipient_email => nil, :recipient_id => nil}  ] } }

上記のハッシュにより、サーバーは配列内で 3 つの個別のハッシュを受信します。ただし、プレースホルダー キーを挿入するのは不便なので、必須ではありません。さらに、そのようなキーの存在に基づいてコントローラーが異なる動作をするシナリオ(一般的ではありませんが) は、テストできません。

于 2013-04-15T00:29:32.407 に答える