いくつかのresqueワーカーと、これらのワーカーでジョブをキューに入れるアクションをテストしたいと思います。私はrspecとrailsを使用しています。
現在、Article.rbというモデルがあります。このモデルには、CategoriesSorterのジョブをキューに入れる必要があるかどうかをチェックするupdates_related_categoriesというbefore_saveメソッドがあります。その場合、記事が関連するカテゴリIDの引数を使用して、そのワーカーのジョブをキューに入れます。
ただし、テストでは、これらのジョブは、開発サーバーがジョブを送信するのと同じキューに送信されます。(root / redis /overviewでサーバーに接続できるresqueサーバーを使用して確認します)
私は知りたいです:
1)テストジョブを開発ジョブとは別のキューに送信するにはどうすればよいですか?
これが可能であれば、resqueのテストに関する他のアドバイスも歓迎します。
resque-unitとresque-specを示唆するいくつかの関連する質問を見ましたが、これらはかなり開発されておらず、有用な動作状態にすることができませんでした。また、Resque.inlineを使用することを聞いたことがありますが、resqueはテスト仕様では呼び出されないため、テストで作成されたオブジェクトの保存時に記事モデルから呼び出されるため、この場合に関連するかどうかはわかりません。
サンプルコード:
Article.rb:
before_save :update_related_categories
def update_related_categories
#some if statements/checks to see if a related category needs updating
Resque.enqueue(CategoriesWorker, [category_id])
end
end
カテゴリソート:
class CategoriesSorter
@queue=:sorting_queue
def self.perform(ids)
ids.each do |id|
#some code
end
end
end
仕様:
it "should do something" do
@article = #set something to enqueue a job
@article.save
#can i check if a job is enqueued? can i send this job NOT to the development queue but a different one?
end