Shamrock

Бывают случаи, когда WebMock’а недостаточно, или же вы просто не любите stub’ы и хотите, чтобы тест делал реальный http запрос. В таких случаях вы можете написать свой простенький http сервер или выбрать один из существующих, и стартовать его на время тестов(а). А можно взять готовую библиотеку - Shamrock.

Она принимает на вход любое Rack приложение и запускает его в отдельном треде с помощью WEBrick’а. Порт можно задать самому. В противном случае будет использован первый свободный.

def setup
  json = load_fixture("service/200.json")
  my_rack_app = proc {|env| [200, {"Content-Type" => "application/json"}, [json]]}
  @service = Shamrock::Service.new(my_rack_app)
  @service.start
  @service.uri    # => #<URI::HTTP http://localhost:54321>
end

def teardown
  @service.stop
end

Доступные параметры у Service#new:

  • handler - обработчик, который запускает Rack приложение (по умолчанию Rack::Handler::WEBrick)
  • port - порт
  • monitor - монитор, который блокируется до тех пор, пока сервер не стартанет

Вообще, либа написана хорошо, и выполняет именно то, что от нее ждут. Правда популярности ей это не принесло :)

Anton Kaliaev

Software engineer, blogger, public speaker, traveler

Ulyanovsk, Russia http://homeonrails.com