ruby-on-rails - 来自 cucumber 的 HTTP POST XML 内容

标签 ruby-on-rails ruby cucumber

我正在尝试通过 POST 将 XML 内容发送到一个简单的 Rails 项目中的 Controller (“解析”)方法(“索引”)。它不是 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

我现在正在尝试 Cucumber (0.4.3),并且想知道如何在“When”子句中模拟 POST 请求。我只有一个 Controller 方法“索引”,我在 config/routes.rb 中有以下内容:

ActionController::Routing::Routes.draw do |map|
  map.connect ':controller/:action/:id'
  map.connect ':controller/:action/:id.:format'
end
  1. cucumber 中的 webrat 只能用于 HTML,不能进行 POST?
  2. @request 变量在 Cucumber 环境中不可用?
  3. 如果我在 features/step_definitions/car_steps.rb 中使用“访问索引”之类的东西(假设它是 Parse Controller 、索引方法),我会收到以下错误:

undefined method `index' for # (NoMethodError)

感谢任何有关如何使用 Cucumber 对包含 XML 内容的 HTTP POST 进行集成测试的建议。

最佳答案

Patrick Ritchie 的解决方案也帮助了我,但我需要稍作修改以使其适用于 Rails 3。

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

我认为这是因为在 v3 中,Rails 与 Rack 的集成更加紧密。

关于ruby-on-rails - 来自 cucumber 的 HTTP POST XML 内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1722153/

相关文章:

gradle - cucumber 验收测试表失败

ruby-on-rails - 为什么 RSpec 的方法 "get"、 "post"、 "put"、 "delete"在 gem(或 Rails 外部)的 Controller 规范中不起作用?

css - @font-family Rails 中的 CSS 规范,未显示正确的字体

ruby-on-rails - Ruby on Rails/Postgres - 如何为不存在的用户创建新数据库?

ruby - Ruby 方法返回 splat-list 的任何理由?

ruby - Ruby 如何返回两个值?

ruby-on-rails - 为投票系统找出/重构这个 if/else

ruby-on-rails - 载波图像维度

java - 是否有某种运行 ID 对于单个 "run"中的所有功能都相同?

testing - 我可以在 cucumber 的例子中有数据表吗?