我正在使用guard / listen gem为目录更改编写一个监听器。将文件添加到目录后,我在该目录中创建一个空的done.txt
文件。
它可以按照我的预期进行手动测试,但由于监听器需要在自己的进程中运行,因此我不确定如何为它编写测试。
我尝试使用fork但是它创建了一个我没想到的闭包。
这是我的听众:
require 'listen'
class Listener
def initialize(directory)
@directory = directory
end
def start
listener = Listen.to(@directory, only: /\.txt$/) do |modified, added, removed|
if added
File.new('done.txt', 'w') if rp_checksum == my_checksum
end
end
listener.start
sleep
end
end
我的测试:
RSpec.describe Listener do
it 'starts the listener' do
fork do
listener = Listener.new("#{Dir.getwd}")
listener.start
end
expect(listener.processing?).to eq(true)
end
我得到的错误:
NameError:
undefined local variable or method `listener' for #<RSpec::ExampleGroups::Listener:0x007fdc91980768>
# ./listener_spec.rb:13:in `block (2 levels) in <top (required)>'
也许我可以守护听众,但我也不确定如何去做。
答案 0 :(得分:0)
我意识到我并不需要测试听众是否正常工作,因为它可能已经过充分测试,所以我只是将if file added
部分提取到一个单独的方法并进行了测试。
是自我实现的!