アクティブジョブ(activejob)
Rails標準のジョブを処理する仕組み
アクティブジョブ(Active Job)とは
Rails標準のジョブを処理する仕組み
指定した個数のジョブが登録されているか確認
説明
指定した個数のジョブが登録されているか確認
使い方
assert_enqueued_jobs(個数, only: 特定のジョブが何回エンキューされた=nil, except: 特定のクラスを除くジョブが何回キューイングされたか=nil, queue: 特定のキューにジョブがエンキューされた回数をアサート=nil, ブロック引数)
例
指定した個数のジョブが登録されているか確認
assert_enqueued_jobs 0
HelloJob.perform_later('david')
assert_enqueued_jobs 1
HelloJob.perform_later('abdelkader')
assert_enqueued_jobs 2
ブロックで渡す
assert_enqueued_jobs 1 do
HelloJob.perform_later('cristian')
end
指定したジョブを確認
assert_enqueued_jobs 1, only: LoggingJob do
LoggingJob.perform_later
HelloJob.perform_later('jeremy')
end
指定したジョブ以外を確認
assert_enqueued_jobs 1, except: HelloJob do
LoggingJob.perform_later
HelloJob.perform_later('jeremy')
end
キューを指定
assert_enqueued_jobs 2, queue: 'default' do
LoggingJob.perform_later
HelloJob.perform_later('elfassy')
end
ソースコード
指定した引数でジョブを登録
説明
指定した引数でジョブを登録されているか確認
使い方
assert_enqueued_with(job: ジョブ=nil, args: 引数=nil, at: At=nil, queue: キュー=nil, priority: プライオリティ=nil, ブロック引数)
例
指定した引数でジョブを登録
MyJob.perform_later(1,2,3)
assert_enqueued_with(job: MyJob, args: [1,2,3], queue: 'low')
ジョブに渡す引数を指定
MyJob.perform_later(foo: 'bar', other_arg: 'No need to check in the test')
assert_enqueued_with(job: MyJob, args: expected_args, queue: 'low')
ブロックで渡す
assert_enqueued_with(job: MyJob, args: [1,2,3], queue: 'low') do
MyJob.perform_later(1,2,3)
end
ソースコード
ストリームにブロードキャストされたメッセージの数を確認
説明
ストリームにブロードキャストされたメッセージの数を確認
使い方
assert_broadcasts(ストリーム, メッセージ数, ブロック引数)
例
ブロードキャストされたメッセージの数を確認
assert_broadcasts 'messages', 0
ActionCable.server.broadcast 'messages', { text: 'hello' }
assert_broadcasts 'messages', 1
ActionCable.server.broadcast 'messages', { text: 'world' }
assert_broadcasts 'messages', 2
ブロック指定
assert_broadcasts('messages', 1) do
ActionCable.server.broadcast 'messages', { text: 'hello' }
end
ソースコード
ストリームにメッセージが送信されていないことを確認
説明
ストリームにメッセージが送信されていないことを確認
使い方
assert_no_broadcasts(ストリーム、ブロック引数)
例
assert_no_broadcasts 'messages'
ソースコード
指定したメッセージがストリームに送信されているか確認
説明
指定したメッセージがストリームに送信されているか確認
使い方
assert_broadcast_on(ストリーム, メッセージ, ブロック引数)
例
ストリームに送信されているか確認
ActionCable.server.broadcast 'messages', text: 'hello'
assert_broadcast_on('messages', text: 'hello')
ブロック指定
assert_broadcast_on('messages', text: 'hello') do
ActionCable.server.broadcast 'messages', text: 'hello'
end
ソースコード
送信されたメールの数が指定された数と一致することを確認
説明
送信されたメールの数が指定された数と一致することを確認
使い方
assert_emails(メール数, ブロック引数)
例
送信されたメールの数が指定された数と一致することを確認
def test_emails
assert_emails 0
ContactMailer.welcome.deliver_now
assert_emails 1
ContactMailer.welcome.deliver_now
assert_emails 2
end
ブロック
def test_emails_again
assert_emails 1 do
ContactMailer.welcome.deliver_now
end
assert_emails 2 do
ContactMailer.welcome.deliver_now
ContactMailer.welcome.deliver_later
end
end
ソースコード
特定のメールがエンキューされたことを確認
説明
特定のメールがエンキューされたことを確認
使い方
assert_enqueued_email_with(メーラー, メソッド, args: 引数=nil, queue: キュー, ブロック引数)
例
特定のメールがエンキューされたことを確認
def test_email
ContactMailer.welcome.deliver_later
assert_enqueued_email_with ContactMailer, :welcome
end
def test_email_with_arguments
ContactMailer.welcome("Hello", "Goodbye").deliver_later
assert_enqueued_email_with ContactMailer, :welcome, args: ["Hello", "Goodbye"]
end
ブロック
def test_email_in_block
assert_enqueued_email_with ContactMailer, :welcome do
ContactMailer.welcome.deliver_later
end
end
ソースコード
メールキューの数を確認
説明
後で配信するために保留されているメールの数を確認
使い方
assert_enqueued_emails(メール数, ブロック引数)
例
後で配信するために保留されているメールの数を確認
def test_emails
assert_enqueued_emails 0
ContactMailer.welcome.deliver_later
assert_enqueued_emails 1
ContactMailer.welcome.deliver_later
assert_enqueued_emails 2
end
ブロック
def test_emails_again
assert_enqueued_emails 1 do
ContactMailer.welcome.deliver_later
end
assert_enqueued_emails 2 do
ContactMailer.welcome.deliver_later
ContactMailer.welcome.deliver_later
end
end
ソースコード
メールが送信されていないことを確認
説明
メールが送信されていないことを確認
使い方
assert_no_emails(ブロック引数)
例
メールが送信されていないことを確認
assert_no_emails()
ブロック
assert_no_emails do
# このブロックからはメールを送信してはいけない
end
ソースコード
メールキューがないことを確認
説明
後で配信するために保留されているメールがないことを確認
使い方
assert_no_enqueued_emails(ブロック引数)
例
後で配信するために保留されているメールがないことを確認
assert_no_enqueued_emails()
ブロック
assert_no_enqueued_emails do
# このブロックからはメールをエンキューしてはいけない
end
ソースコード
与えられたクラスメソッドが与えられたコンテンツに存在することを確認
説明
与えられたクラスメソッドが与えられたコンテンツに存在することを確認
使い方
assert_class_method(メソッド, コンテンツ, ブロック引数)
例
assert_migration "db/migrate/create_products.rb" do |migration|
assert_class_method :up, migration do |up|
assert_match(/create_table/, up)
end
end