2015-01-14 6 views
0

프로덕션 환경에서 Redis + Resque를 사용하고 있으며 작업이 대기열에 들어가고 올바르게 실행되는지 테스트하려고합니다. 나는RSpec의 Resque + Redis 테스트

Resque.jobs(:queue_name).size.should == 0 

post :some_action # This action causes a Resque job to be enqueued 

# Test Enqueuing 
Resque.jobs(:queue_name).size.should == 1 
Resque.jobs(:queue_name).last.klass.should == "MyJob" 
Resque.jobs(:queue_name).last.args.should == [1, "Arg_2"] 
# Test performing 
Resque.jobs(:queue_name).perform_all 
# test the effect of running the job 

은 어떻게 테스트 환경에서 레디 스 + Resque 시작합니까 이런 식으로 뭔가를 찾고 있어요? 나는 항상 수동으로 redis 서버를 실행하는 사람들이 아닙니다. config.before(:suite)에서 redis 서버를 실행하고 실행하는 솔루션을 시도했지만 Redis-server는 결코 시간 내에 시작하지 않으며 Resque는 Redis에 연결할 수 없다는 불만을 제기합니다.

나는 Resque.inline을 사용해 보았지만 1) 작업이 대기열에 넣어 졌는지 테스트 할 수 없었습니다. 2) 대기열에있는 작업을 항상 대기열에 넣었습니다. (올바른 대기열에서 작업이 끝났음을 테스트하고 싶습니다.)

답변

1

저는 개인적으로 Resque 및 Redis를 포함하여 프로젝트에 포함시킨 보석을 사용하여 개발자를 테스트합니다. 결과적으로 테스트 스위트에 테스트하지 않습니다. 예를 들어, 내 응용 프로그램에 대한 보석을 선택할 때 보석의 설명서를보고 TravisCI/Code Climate/등 통계가 포함되어 있는지, 프로젝트가 "녹색"인지 확인하십시오. 그것이 그렇다면, 나는 그것을 사용한다. 그렇지 않은 경우 이전 (예 :보다 안정적인 버전)을 찾거나 대안을 찾으십시오. Resque와 Redis for Rails의 경우,이 두 가지 모두 잘 유지되고 인기가있어 매우 안정적입니다.

내 앱의 경우 Resque/Redis에 메시지가 수신 될 것으로 기대하는 테스트를 작성하기 만하면됩니다.

it "should make a call to Resque for #my_job" do 
    expect(Resque).to_receive(:enqueue).with(SomeJob, args) 

    my_method_which_calls_resque 
end 

그런 다음과 같이 보입니다 당신이 my_method_which_calls_resque라는 테스트하는 방법을 가지고 있다고 가정 : 예를 들어

def my_method_which_calls_resque 
    ... 

    Resque.enqueue(SomeJob, args) 

    ... 
end 

이 테스트는 성공해야합니다. 당신이 Resque 작업 자체 내에서 코드를 테스트하고자하는 경우 메시지와 설정 RSpec에의 기대에 대한 추가 문서

, 당신이 당신의 작업에 대한 RSpec에 테스트를 만들 수 있습니다, 그리고 RelishApp's docs on message expectations.

를 참조하십시오. 예 :

# spec/lib/jobs/some_job_spec.rb 

describe Jobs::SomeJob do 
    describe "#perform" do 
    it "should update someone's account" do 
     ... 
    end 
    end 
end 
+0

나는 레디 스 또는 레스큐 (나는 그들이 작동한다고 확신한다)를 테스트하려하지 않고, 내 애플리케이션 코드를 시험하고있다. 내 응용 프로그램의 일부 작업으로 인해 올바른 인수로 Resque에 대기중인 작업이 발생하고 작업이 실행되면 결과 상태 (예 : 누군가의 계정 업데이트)가 올바른지 테스트하고 싶습니다. – dg428

+0

좋습니다. 그리고 어떤 작업으로 인해 인수가 대기중인 작업을 테스트하려는 경우, 내가 설명한 것은 정확하게 작업이 대기 중인지 테스트하기 위해 수행해야하는 작업입니다. 그런 다음 별도의 단위 테스트에서 작업 * 내의 코드 *를 테스트하십시오. :) – CDub