рдпрд╣рд╛рдБ рдореЗрд░реА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рдкреНрд░рдорд╛рдг рд╣реИ:
require 'spec_helper'
class MyJob < ActiveJob::Base
def perform
OtherJob.perform_later
OtherJob.perform_later
end
end
class OtherJob < ActiveJob::Base
end
describe MyJob do
subject(:my_job) { MyJob.new }
it 'enqueues job' do
expect { my_job.perform }.to have_enqueued_job(OtherJob).at_least(:once)
expect { my_job.perform }.not_to have_enqueued_job(OtherJob)
end
end
рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ, have_enqueued_job
рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХрд╛рд░реНрдп рдареАрдХ рдПрдХ рдмрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП expect { my_job.perform }.to have_enqueued_job(OtherJob)
рд╕рдорд╛рди рд╣реИ expect { my_job.perform }.to have_enqueued_job(OtherJob).exactly(:once)
ред
рд▓реЗрдХрд┐рди рдирдХрд╛рд░рд╛рддреНрдордХ рд╕реНрдерд┐рддрд┐ рдореЗрдВ expect { my_job.perform }.not_to have_enqueued_job(OtherJob)
рд╕рдорд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ expect { my_job.perform }.not_to have_enqueued_job(OtherJob).exactly(:once)
ред рддреЛ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдХреНрдпреЛрдВ expect { my_job.perform }.not_to have_enqueued_job(OtherJob)
рдПрдХ рд╣реА рддрд░рд╣ рдХреЗ рдХрдИ рдХрд╛рдо рд╣реЛрдиреЗ рдкрд░ рд╕рдЪ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реНрдпрд╡рд╣рд╛рд░ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реЛрддрд╛ рд╣реИред
рдЖрд░рдПрд╕рдкреАрд╕реА-рд░реЗрд▓ 3.6.1 рдХреЗ рд╕рд╛рде рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ред
рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдпрд╣рд╛рдВ рдХреНрдпрд╛ рдкреВрдЫ рд░рд╣реЗ рд╣реИрдВ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП , рдХреНрдпреЛрдВрдХрд┐ expect { my_job.perform }.not_to have_enqueued_job(OtherJob)
рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдХреЛрдИ рдиреМрдХрд░реА рдирд╣реАрдВ рдХреА рд╣реИ, рдФрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╣реИред рдЙрдореНрдореАрджреЛрдВ рдХреЛ рдПрдХ рджреВрд╕рд░реЗ рдХрд╛ рдХреЛрдИ рдЬреНрдЮрд╛рди рдирд╣реАрдВ рд╣реИред
рдХреНрдпрд╛ рдЖрдк рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЧреБрдЬрд░рддрд╛ рд╣реИ? рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдмрдЧ рд╣реИред
рдореИрдВ рдХрд╣ рд░рд╣рд╛ рд╣реВрдБ рдХрд┐ expect { my_job.perform }.to have_enqueued_job(OtherJob).at_least(:once)
рдЧреБрдЬрд░рддрд╛ рд╣реИ рдФрд░ expect { my_job.perform }.not_to have_enqueued_job(OtherJob)
рдЧреБрдЬрд░рддрд╛ рд╣реИ
рдореБрдЭреЗ рдПрдХ рд╣реА рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдЖрдк рдЗрд╕рдХреЗ рд╕рд╛рде рд╣реИрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
expect{ my_job.perform }.to have_enqueued_job(OtherJob).exactly(0).times
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдореБрдЭреЗ рдПрдХ рд╣реА рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдЖрдк рдЗрд╕рдХреЗ рд╕рд╛рде рд╣реИрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: