Rspec-rails: рд╡рд┐рд▓рдВрдмрд┐рдд рдПрдХреНрд╢рдирдореЗрд▓рд░ рдбрд┐рд▓реАрд╡рд░реА рдХреЗ рд▓рд┐рдП рдореИрдЪрд░реНрд╕

рдХреЛ рдирд┐рд░реНрдорд┐рдд 22 рдЬреБрд▓ре░ 2017  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: rspec/rspec-rails

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдлреАрдЪрд░ рд╕реБрдЭрд╛рд╡реЛрдВ/рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рд╣реА рдЬрдЧрд╣ рд╣реИред

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд┐рд▓рд╛рдирдХрд░реНрддрд╛ рд╣реИрдВ рдЬреЛ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдореЗрдВ рд╣рдорд╛рд░реА рд╕рд╣рд╛рдпрддрд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреМрди рд╕реА ActiveJob рдиреМрдХрд░рд┐рдпрд╛рдВ рдХрддрд╛рд░ рдореЗрдВ рд╣реИрдВ ( have_enqueued_job ), рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдкрд╛рд╕ ActionMailer рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдЪреАрдЬреЗрдВ рдирд╣реАрдВ рд╣реИрдВред

рдореИрдВрдиреЗ рдХреБрдЫ рдЗрдзрд░-рдЙрдзрд░ рджреЗрдЦрд╛ рд╣реИ рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдИрдореЗрд▓ рднреЗрдЬрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣реА рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдмрддрд╛ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХреМрди рд╕рд╛ рдИрдореЗрд▓ рднреЗрдЬрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдбрд┐рд▓реАрд╡рд░реА рдХреА рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдПрдХреНрд╢рдирдореЗрд▓рд░ рдореЗрдВ рдЧреЛрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред

expect {
  post :create, params: { user: attributes_for(:user) }
}.to change(ActionMailer::Base.deliveries, :size).by(1)

рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдИрдореЗрд▓ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдорд┐рд▓рд╛рдирдХрд░реНрддрд╛ рд╣реЛрдВ рддрд╛рдХрд┐ рд╣рдо рдЕрдзрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдФрд░ рд╡рд░реНрдгрдирд╛рддреНрдордХ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдмрдирд╛ рд╕рдХреЗрдВред

expect {
    post :create, params: { user: attributes_for(:user) }
}.to have_enqueued_mailer(UserMailer, :welcome).with(User.first)

рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕ рддрд░рд╣ рдХреА рдореМрдЬреВрджрд╛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдпрд╛рдж рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдореИрдВрдиреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рджреЗрдЦрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рдорд┐рд▓рд╛ред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдкрд╣рд▓реЗ рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рджреЗрд░ рд╕реЗ рдмреЗрд╣рддрд░, рд▓реЗрдХрд┐рди рдЗрд╕ рдХрд╕реНрдЯрдо рдорд┐рд▓рд╛рдирдХрд░реНрддрд╛ рдХреЛ рдХрдореЛрдмреЗрд╢ рдпрд╣ рдЪрд╛рд▓ рдЪрд▓рдиреА рдЪрд╛рд╣рд┐рдП:

RSpec::Matchers.define :have_enqueued_mailer do |mailer_klass, mailer_action|
  match do |actual|
    actual.call
    <strong i="6">@mailer_klass</strong>, <strong i="7">@mailer_action</strong>, _, *<strong i="8">@args</strong> = enqueued_jobs[0][:args]

    <strong i="9">@mailer_klass</strong> == mailer_klass.to_s &&
      <strong i="10">@mailer_action</strong> == mailer_action.to_s
  end

  chain :with do |*args|
    <strong i="11">@args</strong> == args
  end
  supports_block_expectations
end


рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдкрд╣рд▓реЗ рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рджреЗрд░ рд╕реЗ рдмреЗрд╣рддрд░, рд▓реЗрдХрд┐рди рдЗрд╕ рдХрд╕реНрдЯрдо рдорд┐рд▓рд╛рдирдХрд░реНрддрд╛ рдХреЛ рдХрдореЛрдмреЗрд╢ рдпрд╣ рдЪрд╛рд▓ рдЪрд▓рдиреА рдЪрд╛рд╣рд┐рдП:

RSpec::Matchers.define :have_enqueued_mailer do |mailer_klass, mailer_action|
  match do |actual|
    actual.call
    <strong i="6">@mailer_klass</strong>, <strong i="7">@mailer_action</strong>, _, *<strong i="8">@args</strong> = enqueued_jobs[0][:args]

    <strong i="9">@mailer_klass</strong> == mailer_klass.to_s &&
      <strong i="10">@mailer_action</strong> == mailer_action.to_s
  end

  chain :with do |*args|
    <strong i="11">@args</strong> == args
  end
  supports_block_expectations
end


рдХреНрдпрд╛ рдпрд╣ рдореБрджреНрджрд╛ #1901 рдХрд╛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╣реИ?

рд╣рд╛рдБ @ybiquitous! :)

рдореИрдЪрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж @cgat ред

#1901 . рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдкрди

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

peco8 picture peco8  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

skizzybiz picture skizzybiz  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

a-leung picture a-leung  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

alexbrinkman picture alexbrinkman  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Matrixbirds picture Matrixbirds  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ