2012-05-03 5 views
1

루비 애플리케이션이 Webrick 서버를 실행합니다. 나는 오이로 시험하고 싶고, 그것이 나에게 올바른 반응을 주길 원한다.오이를 사용한 서버 루비 애플리케이션 테스트

테스트 환경에서 서버를 실행하는 것이 정상입니까? 어디에서 내 코드에서 서버 프로세스를 시작해야하며 어디에서 삭제해야합니까?

이제 배경 단계별로 서버를 시작하고 애프터 훅으로 파괴합니다. 모든 시나리오가 시작되기 전에 서버가 시작되고 이후에 서버가 파괴되므로 속도가 느립니다.

나는 env.rb에서 서버를 시작하고 env.rb에서도 선언 된 at_exit 블록에서이를 파괴 할 생각을 가지고있다. 당신이 그것에 대해 어떻게 생각하십니까?

문제의 패턴을 알고 계십니까?

답변

1

저는 이것을 위해 Spork를 사용합니다. 하나 이상의 서버를 시작하고 필요한 경우이를 다시로드 할 수 있습니다. 이렇게하면 테스트를 실행할 때마다 Rails를 실행하는 오버 헤드가 발생하지 않습니다.

https://github.com/sporkrb/spork

체크 아웃 자세한 내용은이 RailsCast : http://railscasts.com/episodes/285-spork

1

오이 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