2017-10-13 24 views
0

私のコードの一部がDelayedJobを実行していることをテストしようとしています。私はDelayed::Worker.delay_jobs = falseを持っている私のspec_helper.rb遅延ジョブが呼び出されたことをテストします

def start_restream 
    ... 
    puts 'Here' 
    Delayed::Job.enqueue(Restream::StartAllJob.new(channel.id)) 
    puts 'After' 
    ... 
end 

#app/jobs/restream/start_all_job.rb 
class Restream::StartAllJob < Struct.new(:channel_id) 
    def perform 
    puts "Inside" 
    ... 
    end 
end 

: は、ここでは、コードです。 スペック:

it 'runs Delayed::Job::Restream::StartAll' do 
    post :start_restream, :id => channel.id 
    expect(Restream::StartAllJob).to receive(:new) 
end 

実行しているとき、それは

Here 
Inside 
After 

をプリントアウトし、私はそれが呼ばれることを知っています。私はexpect_any_instance_of(Restream::StartAllJob).to receive(:perform)を使用する場合には、

Failure/Error: example.run 
     Exactly one instance should have received the following message(s) but didn't: perform 

は私が間違っているのとどのように私はこれをテストすることができますどのような言い、

Failure/Error: expect(Restream::StartAllJob).to receive(:new) 

(Restream::StartAllJob (class)).new(*(any args)) 
     expected: 1 time with any arguments 
     received: 0 times with any arguments 

をまたは:しかし、テストが失敗しましたか?

答えて

0

それは私がために作られたばかりのミスです: expect(Restream::StartAllJob).to receive(:new)post :start_restream, :id => channel.id

前に記述する必要があります
関連する問題