我的SOAP服务的集成/请求rspec测试

3

我有一部分Rails 2 Web服务应用程序,它被用作SOAP服务(由于历史原因,应用程序的其余部分是REST)。 只有两个操作AddLeadShowLead,wsdl位于/soap/wsdl

我想通过Rspec集成测试来测试这些操作。 尝试使用Savon gem(/spec/integration/soap_spec.rb):

require "spec_helper"
require 'rubygems'
require 'savon'

describe "Leads" do

  before(:all) do
    wsdl=   "http://localhost:3000/soap/wsdl"
    wsdl = "http://www.example.com/soap/wsdl"
    @client = Savon.client(:wsdl => wsdl )

    puts("WSDL actions: #{@client.operations}")
  end
end

但我找不到应该用哪个URL指向WSDL。

URL localhost:3000 不起作用,会出现错误:

 Errno::ECONNREFUSED in 'Leads before(:all)'
 Connection could not be made, because target server it actively denied. - connect(2)

URL www.example.com(这是从测试url helpers输出的)也无法使用,以错误结束:

   Wasabi::Resolver::HTTPError in 'Leads before(:all)'
   Error: 302

Any ideas?

Foton


还尝试了相对路径 /soap/wsdl(用于 REST 集成 Rspec 测试;例如, get "resource/id.xml")。结果是: 'Leads before(:all)' 中的 Errno::ENOENT,没有该文件或目录 - /soap/wsdl。 - Foton
:wsdl选项需要您的服务WSDL文档的URL。我不确定Rails在测试期间使用哪个端口(尝试http://test.host:80),但我建议使用Rails的URL-Helpers为您设置正确的主机和端口。 - rubiii
辅助函数 soap_wsdl_url() 指向 http://www.example.com/soap/wsdl。我已经尝试过这个地址,但出现了 Wasabi::Resolver::HTTPError (如上所示)。 - Foton
不知道。你试过用一些HTTP客户端访问URL吗?只是为了确保它正确响应。 - rubiii
如果你在谷歌上搜索 Errno::ECONNREFUSED 错误信息,你可能会找到与你的设置相关的内容。如果这对你没有用,请尝试在一个新的 Rails 应用程序中复现问题,并将仅包含此错误所需代码的应用程序推送到 GitHub。 - rubiii
1个回答

3
请尝试以下链接:http://blog.johnsonch.com/2013/04/18/rails-3-soap-and-testing-oh-my/。在您的describe块内使用HTTPI Rack适配器,然后配置该适配器以挂载您的应用程序。这将使您能够使用特定的URL。
require 'spec_helper'
require 'savon'

describe API::MyService do
  HTTPI.adapter = :rack
  HTTPI::Adapter::Rack.mount 'application', MyApp::Application

  it 'can get a response' do
    application_base = "http://application"
    client = Savon::Client.new({:wsdl => application_base + '/soap/wsdl' })
    ...
    ...
  end
  ...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接