ruby – 在RSpec 2中,如何生成流程,运行一些示例然后终止该流程
发布时间:2020-12-17 01:58:30 所属栏目:百科 来源:网络整理
导读:我试图在我创建的小型服务器上运行一些功能测试.我在Mac OS X 10.6上运行 Ruby 1.9.2和RSpec 2.2.1.我已经验证服务器正常工作,并没有导致我遇到的问题.在我的规范中,我试图产生一个进程来启动服务器,运行一些示例,然后终止运行服务器的进程.这是我的规范的代
我试图在我创建的小型服务器上运行一些功能测试.我在Mac OS X 10.6上运行
Ruby 1.9.2和RSpec 2.2.1.我已经验证服务器正常工作,并没有导致我遇到的问题.在我的规范中,我试图产生一个进程来启动服务器,运行一些示例,然后终止运行服务器的进程.这是我的规范的代码:
describe "Server" do describe "methods" do let(:put) { "put foobar beans 5nhowdy" } before(:all) do @pid = spawn("bin/server") end before(:each) do @sock = TCPSocket.new "127.0.0.1",3000 end after(:each) do @sock.close end after(:all) do Process.kill("HUP",@pid) end it "should be valid for a valid put method" do @sock.send(put,0).should == put.length response = @sock.recv(1000) response.should == "OKn" end #more examples . . . end end 当我运行规范时,似乎运行了before(:all)和after(:all)块,并且在运行示例之前服务器进程被终止,因为我得到以下输出: F Failures: 1) Server methods should be valid for a valid put method Failure/Error: @sock = TCPSocket.new "127.0.0.1",3000 Connection refused - connect(2) # ./spec/server_spec.rb:11:in `initialize' # ./spec/server_spec.rb:11:in `new' # ./spec/server_spec.rb:11:in `block (3 levels) in <top (required)>' 当我注释掉对Process.kill的调用时,服务器启动并运行测试,但服务器仍在运行,这意味着我必须手动杀死它. 似乎我误解了after(:all)方法应该做什么,因为它没有按照我认为的那样运行.为什么会这样?我需要做什么才能达到我的规格 解决方法
您确定服务器已准备好接受连接吗?也许这样的事情会有所帮助:
before(:each) do 3.times do begin @sock = TCPSocket.new "127.0.0.1",2000 break rescue sleep 1 end end raise "could not open connection" unless @sock end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |