2013-04-14 57 views
1

以我rspec的測試支架/測試組合散列成一個,我定義散列以下數組和執行的POST:爲什麼執行POST時或PUT操作

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

基於上述,我期望的Rails服務器接收「invitations_attributes」作爲散列數組。然而,developer.log文件有以下:(在上面的參數, 「invitation_attributes」 陣列只包含1散列)

Parameters: {"auth_token"=>"RSySKfN2L8b5QPqnfGf7", "event"=>{"invitations_attributes"=> 
[{"recipient_id"=>"40", "email"=>"[email protected]", "facebook_id"=>"123456789"}]}} 

以下捲曲語句:

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":"[email protected]"},{"facebook_id":123456789}]}}' 

導致Rails'接收完整的哈希數組,如下面的日誌文件條目所證明的那樣。

Parameters: {"auth_token"=>"RSySKfN2L8b5QPqnfGf7", "event"=>{"invitation_attributes"=> 
[{"recipient_id"=>40}, {"email"=>"[email protected]"}, {"facebook_id"=>123456789}]}} 

機架/測試對於PUT操作和POST都表現出這種行爲。

爲什麼rack/test將3個散列組合爲1而不是完全按照定義發送數組?是否有一個設置會導致機架出現我期望的行爲?

回答

0

一個解決方法是,以確保每個散列通過插入零值的佔位符鍵如下方式包含每個鍵:

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個獨立散列。但是,插入佔位符鍵是不方便的,不應該被要求。此外,基於這樣的密鑰(儘管不常見)的存在,控制器的行爲不同的情況不能被測試。

相關問題