73 lines
1.5 KiB
Ruby
73 lines
1.5 KiB
Ruby
|
|
ENV["RAILS_ENV"] ||= "test"
|
|
require File.expand_path(File.dirname(__FILE__) + '/../../config/environment') unless defined?(Rails)
|
|
|
|
require 'timeout'
|
|
require 'socket'
|
|
require 'singleton'
|
|
|
|
require 'capybara/rails'
|
|
require 'capybara/cucumber'
|
|
require 'capybara/session'
|
|
|
|
class TestServerFixture
|
|
# simple interface to script/server
|
|
|
|
def self.is_port_open(host, port, tries)
|
|
for i in (1..tries)
|
|
begin
|
|
Timeout::timeout(2) do
|
|
begin
|
|
s = TCPSocket.new(host, port)
|
|
s.close
|
|
return true
|
|
rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH
|
|
sleep( 2)
|
|
end
|
|
end
|
|
rescue Timeout::Error
|
|
return false
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
def self.start_if_needed
|
|
unless TestServerFixture.is_port_open( "localhost", 3000, 2)
|
|
system( "script/server -d")
|
|
if TestServerFixture.is_port_open( "localhost", 3000, 30)
|
|
puts "script/server started"
|
|
else
|
|
puts "Error: can't start script/server"
|
|
end
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
class CapybaraSettings
|
|
# simple save/restore for Capybara
|
|
|
|
include Singleton
|
|
|
|
def save
|
|
begin
|
|
@run_server = Capybara.run_server
|
|
@driver = Capybara.current_driver
|
|
@host = Capybara.app_host
|
|
rescue => e
|
|
puts "Saving exception: " + e.inspect
|
|
end
|
|
end
|
|
|
|
def restore
|
|
begin
|
|
Capybara.current_driver = @driver
|
|
Capybara.app_host = @host
|
|
Capybara.run_server = @run_server
|
|
rescue => e
|
|
puts "Restore exception: " + e.inspect
|
|
end
|
|
end
|
|
|
|
end
|