2011-07-11 70 views
4

我有以下幾點:Ruby on Rails的:功能測試:POST不發送原始XML數據

@request.env['RAW_POST_DATA'] = data 
    @request.env['CONTENT_TYPE'] = 'application/xml' 
    @request.env['HTTP_CONTENT_TYPE'] = 'application/xml' 
    post "create", :api_key => api_key, :format => "xml" 

和test.log中表明這一點:

Processing ****Controller#create to xml (for 0.0.0.0 at 2011-07-08 15:40:20) [POST] 
    Parameters: {"format"=>"xml", "action"=>"create", "api_key"=>"the_hatter_wants_to_have_tea1", "controller"=>"****"} 

哪...我猜是罰款,但RAW_POST_DATA不顯示在日誌中的參數列表中的散列....現在...它工作時,我使用curl調用來自終端的動作:

curl -H 'Content-Type: application/xml' -d '<object><name>Das Object</name></object>' http://notAvailableDuringTesting.butWorksInDevelopmentMode.dev/object.xml?api_key=the_hatter_wants_to_have_tea1 

我在這裏做錯了什麼?

+0

你看着辦吧範圍之外的工作?我的回答有幫助嗎?如果不是的話 - 你可以在這裏發佈解決方案供其他人學習嗎? :) –

+0

我還沒有弄明白/已經放棄了測試。 = \ – NullVoxPopuli

+0

我有這個完全相同的問題,但我張貼JSON。如果我用cURL打開它,Rails會正確地解析它,但不會從功能測試中解析它,無論我做什麼。 –

回答

0

有沒有一個原因,你不只是通過參數後通話本身?例如:

post "create", :api_key => api_key, :format => "xml", :params => data 

控制器測試在那裏測試控制器動作做什麼,當你把它PARAMS你已經知道的預計。他們通常不在那裏測試解析xml到params。

如果你只是想測試前者 - 那麼不要把它們變成xml - 只要將它們作爲散列傳遞即可。

如果你確實想測試XML轉換則params的解析 - 你可能需要考慮的東西的軌道試驗(如硒的Watir)

+0

因爲如果你這樣做,控制器不解析XML。或者至少,我的沒有。 – NullVoxPopuli

+0

是的 - 如果你這樣做的話,你不應該把它作爲xml來傳遞 - 就像散列一樣。當然,如果目的是專門傳遞xml - 那麼我不確定你需要做什麼。 –

+0

我已經更新了涵蓋控制器測試範圍的答案。 –