2012-03-13 3 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 메서드는 같은 스레드에서 작업과 콜백을 실행합니다.

관련 문제