我的ruby应用程序运行Webrick服务器。我想用黄瓜测试它,并希望确保它能给我正确的反应。
在测试环境中运行服务器进行测试是否正常?在我的代码中我应该启动服务器进程以及我应该在哪里销毁它?
现在我通过后台步骤启动服务器并在After hook中销毁。它很慢,因为服务器在每个场景之前启动并在之后销毁。
我想在env.rb中启动服务器并在env.rb中声明的at_exit块中销毁它。你觉得怎么样?
你知道这个问题的任何模式吗?
答案 0 :(得分:1)
我为此使用Spork。它启动一个或多个服务器,并且能够在需要时重新加载这些服务器。这样,每次运行测试时,都不会产生启动Rails的开销。
https://github.com/sporkrb/spork
查看此RailsCast了解详情:http://railscasts.com/episodes/285-spork
答案 1 :(得分:1)
由于黄瓜不再支持spork(为什么?)我在env.rb中使用以下代码 要分叉一个进程,我使用这个lib: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