Ich versuche, einen Funktionstest auf einem kleinen Server, den ich erstellt habe, auszuführen. Ich laufe Ruby 1.9.2 und RSpec 2.2.1 unter Mac OS X 10.6. Ich habe überprüft, dass der Server ordnungsgemäß funktioniert und die Probleme nicht verursacht, die ich erhalte. In meiner Spezifikation versuche ich, einen Prozess zu starten, um den Server zu starten, einige Beispiele auszuführen und dann den Prozess zu beenden, der den Server ausführt. Hier ist der Code für meine spec:Wie kann ich in RSpec 2 einen Prozess generieren, einige Beispiele ausführen und diesen Prozess dann beenden?
describe "Server" do
describe "methods" do
let(:put) { "put foobar beans 5\nhowdy" }
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 == "OK\n"
end
#more examples . . .
end
end
Wenn ich die spec laufen, scheint es, dass die vor (: all) und nach (: alle) Blöcke ausgeführt werden, und die Server-Prozesse getötet wird, bevor die Beispiele ausgeführt werden , weil ich die folgende Ausgabe:
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)>'
Wenn ich kommentieren sie den Anruf zu Process.kill
, wird der Server gestartet und die Tests ausgeführt, aber der Server bleibt ausgeführt wird, was bedeutet, dass ich manuell zu töten, es zu gehen.
Es scheint, als ob ich falsch verstehe, was die after (: all) -Methode tun soll, weil sie nicht in der Reihenfolge ausgeführt wird, in der ich dachte, sie würde es tun. Warum passiert dies? Was muss ich tun, damit meine Spezifikationen
Das sieht aus wie es das Problem war. Vielen Dank! – jergason