Rspec-rails: المطابقات لتسليم ActionMailer المتأخر

تم إنشاؤها على ٢٢ يوليو ٢٠١٧  ·  3تعليقات  ·  مصدر: rspec/rspec-rails

آمل أن يكون هذا هو المكان المناسب لاقتراحات / طلبات الميزات.

لدينا أدوات مطابقة محددة تساعدنا في التحقق من وظائف ActiveJob التي تم وضعها في قائمة الانتظار ( have_enqueued_job ) ، لكن ليس لدينا أشياء مماثلة لـ ActionMailer.

لقد قمت ببعض البحث ويبدو أن هذه هي الطريقة العامة المستخدمة لاختبار إرسال بريد إلكتروني. هذا لا يبدو صحيحًا تمامًا لأنني لا أصف البريد الإلكتروني الذي تم إرساله ، وأحتاج إلى الغوص في 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 التقييمات