对保护/听取倾听者的简单测试

时间:2015-03-19 14:19:45

标签: ruby unit-testing listener

我正在使用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)>'

也许我可以守护听众,但我也不确定如何去做。

1 个答案:

答案 0 :(得分:0)

我意识到我并不需要测试听众是否正常工作,因为它可能已经过充分测试,所以我只是将if file added部分提取到一个单独的方法并进行了测试。

是自我实现的!