当前位置:  开发笔记 > 后端 > 正文

来自黄瓜的HTTP POST XML内容

如何解决《来自黄瓜的HTTPPOSTXML内容》经验,为你挑选了2个好方法。

我试图通过POST将XML内容发送到一个简单的Rails项目中的控制器('Parse')方法('index').它不是RESTful,因为我的模型名称不同,比如"汽车".我在功能测试中有以下功能:

def test_index
   ...
   data_file_path = File.dirname(__FILE__) + 
        '/../../app/views/layouts/index.xml.erb'

   message = ERB.new( File.read( data_file_path ) )
   xml_result = message.result( binding )
   doc = REXML::Document.new xml_result

   @request.env['RAW_POST_DATA'] = xml_result
   post :index
   assert_response :success
end

我现在正在尝试黄瓜(0.4.3),并且想知道如何在"When"子句中模拟POST请求.我只有一个控制器方法'index',我在config/routes.rb中有以下内容:

ActionController::Routing::Routes.draw do |map|
  map.connect ':controller/:action/:id'
  map.connect ':controller/:action/:id.:format'
end

    黄瓜内的webrat只适用于HTML,不能做POST?

    黄瓜环境不提供@request变量?

    如果我在features/step_definitions/car_steps.rb中使用类似'visit index'(假设它是Parse控制器,索引方法)的东西,我会收到以下错误:

#(NoMethodError)的未定义方法`index'

感谢有关如何使用Cucumber进行集成测试的任何建议,以便使用XML内容进行HTTP POST.



1> 小智..:

Patrick Ritchie的解决方案也帮助了我,但我需要做一些修改才能使它适用于Rails 3.

post("/controller/index", xml_result, {"CONTENT_TYPE" => "text/xml"})

我认为这是因为,在第3版中,Rails与Rack更紧密地集成在一起.



2> Patrick Ritc..:

Webrat在这里不会帮助你,它适用于基于浏览器的交互,所以如果你正在推测一个API它将无济于事.

您可以在Cucumber中使用"post",但您需要提供操作的完整路径,而不仅仅是操作.此外,传入Content-type标头,以便Rails知道您正在传递XML.

post("/controller/index", xml_result, {"Content-type" => "text/xml"})

在响应方面,您可以执行以下操作:

response.should be_success

推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有