Протестируйте локальный веб-сервис с Savon - PullRequest
1 голос
/ 03 января 2012

Я пишу гем, чтобы добавить поддержку сервисов SOAP в Ruby (я ненавижу себя за то, что делаю это, но, вы знаете, старые системы чувствуют себя одиноко и должны с кем-то поговорить), и мне интересно, есть ли способ Я могу написать несколько тестов, используя Savon в качестве клиентской библиотеки.

Мой вопрос: как я могу сказать Savon, чтобы он вызывал WebService, используя Rack::Test?

Источники драгоценных камней находятся здесь: https://github.com/elementar/shapewear

1 Ответ

3 голосов
/ 06 января 2012

Я использовал WebMock gem. Вот результат:

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