2011-05-18 58 views
2

Rails的API功能測試,我已經寫了建在使用早該測試框架Rails的API端點的功能測試。與XML主體

一個例子如下所示:

setup do 
    authenticated_xml_request('xml-file-name') 
    post :new 
    end 

    should respond_with :success 

authenticated_xml_request是設置 @ request.env [ 'RAW_POST_DATA']與XML內容的測試輔助方法。

軌2.3.3升級應用軌道2.3.8後,功能測試失敗,因爲收到的XML內容params哈希表不合並。

我通過@ request.accept = 爲「text/xml」的

我能夠檢查使用request.raw_post的請求的內容設置與正確的MIME類型的請求但我想保持當前的設置工作。

此外,使用捲曲或在開發模式中的任何其他的庫(rest_http)從終端運行的試驗中,API工作得很好。

任何提示或幫助深表感謝。

+0

也許這裏描述的類似問題http://stackoverflow.com/questions/5474303/auth-hmac-functional-testing-problem – Fivell 2011-06-02 15:25:40

+0

是的,我試過了,但不斷得到'@ request.env ['action_dispatch.request .parameters']'是'nil' – cnicolaou 2011-06-02 21:37:18

回答

0

我通過添加自定義補丁軌(test_process.rb文件)傳入的XML哈希然後合併成多個參數哈希轉換解決了這個問題。

上線439:

parameters ||= {}

parameters.merge!(Hash.from_xml(@request.env['RAW_POST_DATA'])) if @request.env['RAW_POST_DATA'] && @request.env['CONTENT_TYPE']=='application/xml'

+0

你可以添加補丁嗎? – 2011-06-08 21:10:44

1

現在,它更簡單:

post "/api/v1/users.xml", user.to_xml, "CONTENT_TYPE" => 'application/xml' 

請注意,您必須指定適當的 「CONTENT_TYPE」。在其他情況下,您的請求將以「application/x-www-form-urlencoded」的形式發佈,xml將不會被正確解析。