我正在使用Savon gem,使用与下面类似的代码发出SOAP请求.它正在工作,但我想查看/捕获请求XML,而不实际调用他们的服务器.我现在可以在发出请求后查看它,方法是在请求后插入调试器行并判断客户机变量.

有人知道一种不用实际发出请求就可以查看请求XML的方法吗?我希望能够使用Cucumber或Rspec根据模式验证XML.

client = Savon::Client.new do |wsdl, http|
  wsdl.document = "http://fakesite.org/fake.asmx?wsdl"
end

client.request(:testpostdata, :xmlns => "http://fakesite.org/") do
  soap.header = { :cAuthentication => {"UserName" => "MyName", "Password" => "MyPassword" } }
  soap.body = { :xml_data => to_xml }
end

推荐答案

Savon使用HTTPI执行SOAP请求.HTTPI是各种Ruby HTTP客户端之上的通用接口.您可能可以通过以下方式模拟/存根Savon执行的HTTP请求:

HTTPI.expects(:post).with do |http|
  SchemaValidation.validate(:get_user, http.body)
end

请注意,我使用Mocha来模拟SOAP请求,获取HTTP主体,并根据某种验证方法(伪代码)对其进行验证.

目前,Savon不支持在不执行请求的情况下构建请求.所以验证请求的唯一方法就是拦截它.

如果你需要Savon来支持这个功能,请告诉我.

编辑:还有savon_spec个,这是使用Savon进行基于fixture 的基本测试的一个小助手.

Ruby相关问答推荐

如何在 Ruby 中验证来自多项 Select 提示的命令行输入?

.nil?、.blank? 之间的区别?和.empty?

我如何判断哪些模块已混合到一个类中?

从href html标签中提取带有Ruby中nokogiri的链接(URL)?

Ruby 中有类似 Python 生成器的东西吗?

如何在 Ruby 中初始化 Hash 中的数组

对具有相同键的 2 个哈希属性求和

Ruby - 将块传递给方法

jekyll 调试或打印所有变量

ruby 是否支持 case 语句中的范围?

如何使用 RVM 重新编译 ruby​​?

在单个 node 上使用 XPath 返回所有 node 中的元素

Ruby 中的p是什么?

Ruby 中的 method_missing trap

将哈希转换为 struct

在 Ruby 中将散列扁平化为字符串

处理来自 Net::HTTP 的异常的最佳方法是什么?

什么是 Rakefile?

等号 ('=') 放在方法定义中的方法名称之后有什么作用?

将 Nokogiri 文档转换为 Ruby 哈希