2015-03-19 5 views
0

Я использую гвардию охраны/прослушивания, чтобы написать прослушиватель для изменения каталога. Когда файл добавляется в каталог, я создаю пустой файл done.txt в этом каталоге.Простой тест для прослушивания прослушивателя/прослушивания

Он работает так, как я ожидаю, при ручном тестировании, но не уверен, как написать тест для него, поскольку слушатель должен работать в своем собственном процессе.

Я пробовал использовать вилку, но это вроде создаёт закрытие, которого я не ожидал.

Вот мой слушатель:

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

Я понял, что мне действительно не нужно проверять, что слушатель работает так, как он, вероятно, хорошо протестирован, поэтому я просто извлек часть if file added в отдельный метод и протестировал это.

Yay для самореализации!

Смежные вопросы