Как проверить отложенное действие - EventMachine - PullRequest
1 голос
/ 13 марта 2012

У меня есть приложение Sinatra, которое работает внутри EventMachine. В настоящее время я принимаю пост-запрос данных JSON, откладываю хранение и возвращаю код состояния 200 OK. Отложенная задача просто помещает данные в очередь и увеличивает счетчик статистики. Код похож на:

class App < Sinatra::Base
  ...

  post '/' do
    json = request.body.read

    operation = lambda do
      push_to_queue(json)
      incr_incoming_stats
    end
    callback = lambda {}

    EM.defer(operation, callback)
  end

  ...
end

Мой вопрос: как мне проверить эту функциональность? Если я использую Rack::Test::Methods, то мне нужно добавить что-то вроде sleep 1, чтобы убедиться, что отложенная задача завершена, прежде чем проверять очередь и статистику, чтобы мой тест мог выглядеть так:

it 'should push data to queue with valid request' do
  post('/', @json)
  sleep 1
  @redis.llen("#{@opts[:redis_prefix]}-queue").should > 0
end

Любая помощь приветствуется!

1 Ответ

2 голосов
/ 12 апреля 2012

Решение было довольно простым, и как только я понял это, я почувствовал себя немного глупо.Я создал тест-помощник, который содержал следующее:

module EM
  def self.defer(op, callback)
    callback.call(op.call)
  end
end

Затем просто включите это в свои тестовые файлы.Таким образом, метод defer просто запустит операцию и обратный вызов в одном потоке.

...