2012-01-03 14 views
1

私はSOAPサービスのサポートをRubyに追加するための宝石を書いています(これは自分自身が嫌いですが、レガシーシステムは寂しく感じて誰かに話す必要があります) Savonをクライアントライブラリとして使用していくつかのテストを書くことができるかどうか疑問に思っています。SavonによるローカルWebサービスのテスト

私の質問は:Rack::Testを使用してSavonにWebServiceを呼び出すにはどうすればよいですか?

宝石の源はここでホストされていますhttps://github.com/elementar/shapewear

+1

はhttps://github.com/rubiii経由で連絡を取ると我々はそれについて話しましょう! – rubiii

答えて

3

私はWebMock宝石を使用して終了しました。ここでの結果です:

https://github.com/elementar/shapewear/blob/master/spec/shapewear/savon_usage_spec.rb

describe Shapewear do 
    describe "usage with SOAP clients" do 
    before do 
     stub_request(:get, "http://services.example.com/complete/soap/wsdl") \ 
     .to_return :body => CompleteService.to_wsdl, 
        :headers => {'Content-Type' => 'application/xml'} 

     stub_request(:post, "http://services.example.com/complete/soap") \ 
     .to_return :body => lambda { |r| CompleteService.serve(r) }, 
        :headers => {'Content-Type' => 'application/xml'} 
    end 

    it "should work with Savon" do 
     client = Savon::Client.new 'http://services.example.com/complete/soap/wsdl' 
     response = client.request :echo_in_uppercase, :xmlns => 'http://services.example.com/v1' do 
     soap.body = {:text => 'uppercase text'} 
     end 

     response.body[:echo_in_uppercase_response][:body].should == 'UPPERCASE TEXT' 
    end 
    end 
end