Тестирование серверного ruby-приложения с огурцом

Мое рубиновое приложение запускает сервер Webrick. Я хочу протестировать его на огурце и убедиться, что он дает мне правильный ответ.

Нормально ли запускать сервер в тестовой среде для тестирования? Где в моем коде я должен запустить серверный процесс и где я должен его уничтожить?

Теперь я запускаю сервер в фоновом режиме и уничтожаю в After hook. Это медленно, потому что сервер запускается перед каждым сценарием и уничтожается после.

У меня есть идея запустить сервер в env.rb и уничтожить его в блоке at_exit, объявленном также в env.rb. Что вы думаете об этом?

Знаете ли вы какие-либо шаблоны для этой проблемы?


person Dmitry    schedule 03.05.2012    source источник


Ответы (2)


Я использую для этого Спорк. Он запускает один или несколько серверов и может перезагружать их при необходимости. Таким образом, каждый раз, когда вы запускаете свои тесты, вы не несете накладных расходов на запуск Rails.

https://github.com/sporkrb/spork

Подробности смотрите на RailsCast: http://railscasts.com/episodes/285-spork

person Benjamin Cox    schedule 03.05.2012

Поскольку огурец больше не поддерживает spork (почему?), я использую следующий код в env.rb. Чтобы разветвить процесс, я использую эту библиотеку: https://github.com/jarib/childprocess

require 'childprocess'

ChildProcess.posix_spawn = true

    wkDir=File.dirname(__FILE__)

server_dir = File.join(wkDir, '../../site/dev/bin')
#Because I use rvm , I have to run the server thru a shell
@server = ChildProcess.build("sh","-c","ruby pageServer.rb -p 4563")
@server.cwd = server_dir
@server.io.inherit!
@server.leader = true
@server.start

at_exit do
puts "----------------at exit--------------"
puts  "Killing process " + @server.pid.to_s
 @server.stop
 if @server.alive?
     puts "Server is still alive - kill it manually"
 end
end
person user767108    schedule 25.07.2014