Ruby on Rails:功能测试:POST 不发送原始 XML 数据

Nul*_*uli 5 testing ruby-on-rails http-post functional-testing

我有以下内容:

  @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"
Run Code Online (Sandbox Code Playgroud)

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"=>"****"}
Run Code Online (Sandbox Code Playgroud)

哪个...我想没问题,但是 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
Run Code Online (Sandbox Code Playgroud)

我在这里做错了什么?

Tar*_*ast 0

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

 post "create", :api_key => api_key, :format => "xml", :params => data
Run Code Online (Sandbox Code Playgroud)

控制器测试用于测试当您向控制器发送已知的参数时,控制器操作是否执行其期望的操作。它们通常不会测试将 xml 解析为参数。

如果您只想测试前者 - 那么不必费心将它们制作成 xml - 只需将它们作为散列传递即可。

如果您确实想测试将 xml 解析为参数 - 您可能需要研究在 Rails 测试范围之外运行的内容(例如 selenium 或 watir)