用cucumber测试服务器ruby应用程序

用cucumber测试服务器ruby应用程序,ruby,cucumber,bdd,webrick,Ruby,Cucumber,Bdd,Webrick,我的ruby应用程序运行Webrick服务器。我想通过cucumber来测试它,并确保它能给我正确的反应 在测试环境中运行服务器进行测试是否正常?在我的代码中,我应该在哪里启动服务器进程,在哪里销毁它 现在我通过后台步骤启动服务器,并在钩子后销毁。它很慢,因为服务器在每个场景之前启动,在每个场景之后销毁 我想在env.rb中启动服务器,并在env.rb中声明的at_exit块中销毁它。你觉得怎么样 你知道这个问题的模式吗?我用Spork来解决这个问题。它启动一个或多个服务器,并能够在需要时重新加

我的ruby应用程序运行Webrick服务器。我想通过cucumber来测试它,并确保它能给我正确的反应

在测试环境中运行服务器进行测试是否正常?在我的代码中,我应该在哪里启动服务器进程,在哪里销毁它

现在我通过后台步骤启动服务器,并在钩子后销毁。它很慢,因为服务器在每个场景之前启动,在每个场景之后销毁

我想在env.rb中启动服务器,并在env.rb中声明的at_exit块中销毁它。你觉得怎么样


你知道这个问题的模式吗?

我用Spork来解决这个问题。它启动一个或多个服务器,并能够在需要时重新加载这些服务器。这样,每次运行测试时,就不会产生启动Rails的开销


查看此RailsCast了解详细信息:

因为cucumber不再支持spork(为什么?) 要派生进程,我使用以下库:

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