2012-03-13 18 views
1

EventMachineの内部で動作するSinatraアプリケーションがあります。現在、JSONデータのポストリクエストを受けてストレージを延期し、200 OKステータスコードを返しています。遅延タスクは単にデータをキューにプッシュし、統計カウンタをインクリメントします。コードは次のようになります。遅延アクションをテストする方法 - EventMachine

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 

私の質問は、この機能をテストする方法です。

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

がすべてのヘルプは高く評価されています。私はRack::Test::Methodsを使用する場合、私は私のテストは、ように見えることができるようにキューと統計情報をチェックする前に延期タスクが完了したことを確認するsleep 1のようなものに入れて持っています!

答えて

1

解決策はかなりシンプルで、一度それを実感すると、私は馬鹿げたように感じました。

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

次に、このファイルをテストファイルに追加してください。このようにして、deferメソッドは同じスレッド上で操作とコールバックを実行します。

関連する問題