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