delayed_job プラグインで優先度がどのように機能するかをテストしたいと考えています。railscasts のmailitアプリを使用しています。優先度の高いメッセージを 100 件、優先度の低いメッセージを 100 件送信したいと考えています。そして、優先度の低いメッセージが時間通りに配信されるか、それとも脇に置かれるかを確認したいと思います。
このようなテストを行うにはどうすればよいですか。
delayed_job プラグインで優先度がどのように機能するかをテストしたいと考えています。railscasts のmailitアプリを使用しています。優先度の高いメッセージを 100 件、優先度の低いメッセージを 100 件送信したいと考えています。そして、優先度の低いメッセージが時間通りに配信されるか、それとも脇に置かれるかを確認したいと思います。
このようなテストを行うにはどうすればよいですか。
このようなテストを作成することは、大きな問題ではありません。優先度の高いメールを 100 件生成し、次に優先度の低いメールを 100 件生成します。またはその逆。データベースをチェックして、すべてのジョブがそこにあり、説明されていることを確認するまで、ワーカーを開始しないでください。yourR ワーカーを起動し、ジョブがどのように実行されているかを監視します (正しい順序で)。d_j の優先度は昇順であるため、優先度 1 は 10 よりも高いことに注意してください。
現在、200 のジョブは多くありません。あなたのワーカーは、それらすべてをかなり迅速に実行する可能性があります。優先度の低いメールがまだ送信されるかどうかを本当にテストしたい場合は、メール以外にも d_j を使用する場合、キューに他に何があるかに依存する必要があります。キューに少なくとも数千のジョブ (または「最悪のシナリオ」を想像できるもの) を入力し、それを使用してテストを実行することをお勧めします。電子メール以外のジョブが優先度の低い電子メールよりも優先度が高い場合、優先度の高い 100 個のジョブよりも電子メールの配信に影響を与える可能性が高くなります。
それらのメールが実際の受信者にどれだけ速く届くかを知りたい場合は、1つのことを行うことができます。それらのメールを送信することです。実際に完全な配信プロセスを実行しないと、グレーリスト、MXの誤動作、MXの混雑、コンテンツスキャナーの破損(さらに悪いことに、SMTPプロキシモードのコンテンツスキャナーの破損)が原因で遅延するメールの数を知る方法はまったくありません。受信サーバーなどでインターネット接続が切断されました。
実際にDelayedJob処理のメール送信処理をテストするテストを実装してみました。テストは実際には非常に簡単です。
優先度の高いジョブと優先度の低いジョブの 2 つのジョブ (100 ではなく) をキューに入れる必要があります。次に、「Delayed::Job.work_off」メソッドを使用して最初のジョブを実行し、優先度の低いジョブがまだデータベースで待機していることをアサートします。ジョブの実行方法がまだ不明な場合は、ライブラリを参照してください。コードはかなりよく書かれています。
これが私のアプリケーションからのコードの抜粋です。基本的にリマインダー メールをユーザーに送信する必要があるため、ジョブが適切に実行され、メーラーが爆破されないようにする必要があります。リマインダー モデルはメールをエンキューして送信する方法をすべて知っているので、このテストをreminder_test.rb単体テスト ファイルに入れました。
# enqueue the jobs here
assert_difference 'Delayed::Job.count', -1, 'Job should execute successfully' do
assert_difference 'ActionMailer::Base.deliveries.count' do
Delayed::Job.work_off
end
end
# make sure the email was properly delivered
email = ActionMailer::Base.deliveries.last
assert_equal email.to[0], @user.email
assert (Time.now - @reminder.reload.sent_at) < 1.seconds
乾杯!この助けを願っています
アレックス