2013-06-19 59 views
3

我有我的rails 2 web服務應用程序的一部分用作SOAP服務(歷史原因,其餘應用程序是REST)。 只需兩個操作AddLeadShowLead,wsdl在/soap/wsdl我的SOAP服務的集成/請求rspec測試

我想通過Rspec集成測試來測試此操作。 嘗試使用薩翁寶石(/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(這是從測試網址助手輸出)也不起作用,錯誤結束:

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

任何想法?

福田

+0

還嘗試過只是實際路徑'/ soap/wsdl'(用於REST集成Rspec測試;例如'get「resource/id.xml」')。結果是:'Errno :: ENOENT in'Leads before(:all)' 沒有這樣的文件或目錄 -/soap/wsdl' – Foton

+0

':wsdl'選項需要URL到您的服務的WSDL文檔。我不確定Rails在測試過程中使用的端口(嘗試'http://test.host:80'),但我建議使用Rails的URL-Helpers爲您設置corrent主機和端口。 – rubiii

+0

助手'soap_wsdl_url()'指向'http:// www.example.com/soap/wsdl'。我已經嘗試過使用Wasabi :: Resolver :: HTTPError(參見上文)。 – Foton

回答

3

嘗試以下鏈接:http://blog.johnsonch.com/2013/04/18/rails-3-soap-and-testing-oh-my/

內,您的描述塊使用HTTPI機架適配器,然後配置適配器安裝應用程序。這將使您能夠使用特定的網址。

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 
    ...