我有一个jruby类,其中包含每隔一定时间执行一次操作的心跳:(下面的简化代码)
class Client
def initialise
@interval = 30
@heartbeat = Thread.new do
begin
loop do
puts "heartbeat"
sleep @interval
end
rescue Exception => e
Thread.main.raise e
end
end
end
end
我有一系列的rspec测试来实例化这个类。
在每次测试结束时,我都希望对象被销毁,但线程似乎仍然存在。
目前我已修复此问题: client.rb:
def kill
@heartbeat.kill
end
rspec的:
after(:all) do
client.kill
end
这似乎可以胜任这项工作 - 但这并不是最好的方法。
最好的方法是什么?
使用版本jruby-9.1.10.0& rspec 3.7.0
编辑: 根据{{3}}我希望线程在主线程正常时终止 在我的测试中,我使用
实例化客户端describe Client do
context 'bla' do
let(:client) do
described_class.new
end
it 'blas' do
end
end
end
答案 0 :(得分:1)
您应该将after(:all)
替换为after(:each)
。
对于您想要执行的操作,应该是正确的语法,因为after(:all)
在运行所有测试用例后进行评估。