2011-05-18 55 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将不会被正确解析。