【问题标题】:Ruby on Rails: Functional Testing: POST does not send raw XML dataRuby on Rails:功能测试:POST 不发送原始 XML 数据
【发布时间】:2011-07-11 16:43:53
【问题描述】:

我有以下:

  @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

我在这里做错了什么?

【问题讨论】:

  • 你弄明白了吗?我的回答有帮助吗?如果没有 - 你可以在这里发布解决方案供其他人学习吗? :)
  • 我还没弄明白/已经放弃了测试。 =\
  • 我有同样的问题,但我发布的是 JSON。如果我用 cURL 击中它,Rails 会正确解析它,但无论我做什么,都不会从功能测试中解析它。
  • 这似乎对我有用:stackoverflow.com/a/2106677/172106

标签: ruby-on-rails testing http-post functional-testing


【解决方案1】:

您是否有理由不将参数传递给 post 调用本身?例如:

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

控制器测试用于测试控制器操作在您向其发送您已经知道的参数时是否符合预期。他们通常不在那里测试将 xml 解析为参数。

如果您只是想测试前者 - 那就不要费心将它们转换成 xml - 只需将它们作为哈希传递。

如果您确实想测试将 xml 解析为参数 - 您可能需要查看在 rails 测试范围之外运行的东西(例如 selenium 或 watir)

【讨论】:

  • 因为如果你这样做,控制器不会解析 XML。或者至少,我的没有。
  • 是的 - 如果你这样做,你不应该将它作为 xml 传递 - 只是作为一个哈希。当然,如果目的是专门传递 xml - 那么我不确定你需要做什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-02
  • 1970-01-01
  • 2018-02-04
  • 2014-08-04
  • 1970-01-01
  • 2011-04-05
相关资源
最近更新 更多