【问题标题】:Rails API functional tests with XML body使用 XML 正文进行 Rails API 功能测试
【发布时间】:2011-10-28 18:17:13
【问题描述】:

我已经使用 shoulda 测试框架为 Rails 中构建的 API 端点编写了功能测试。

示例如下所示:

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

  should respond_with :success

authenticated_xml_request 是一个测试助手方法,它设置 @request.env['RAW_POST_DATA'] 包含 XML 内容。

将应用从 rails 2.3.3 升级到 rails 2.3.8 后,功能测试失败,因为接收到的 XML 内容未合并到 params 哈希中。

我正在通过 @request.accept = 使用正确的 mime 类型设置请求 “文本/xml”

我可以使用 request.raw_post 检查请求的内容,但我想保持当前设置正常工作。

此外,在开发模式下使用 cURL 或任何其他库 (rest_http) 从终端运行测试,API 运行良好。

非常感谢任何提示或帮助。

【问题讨论】:

标签: ruby-on-rails testing httprequest


【解决方案1】:

现在更简单了:

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

请注意,您必须指定适当的“CONTENT_TYPE”。在其他情况下,您的请求将变为“application/x-www-form-urlencoded”,并且无法正确解析 xml。

【讨论】:

    【解决方案2】:

    我通过向 Rails(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'

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-30
      • 1970-01-01
      • 2011-03-12
      • 2011-10-08
      • 1970-01-01
      • 2019-07-05
      • 2015-11-28
      • 1970-01-01
      相关资源
      最近更新 更多