1

プロジェクトでダッシュ レールhttps://github.com/gottfrois/dashing-railsを使用しています。rails env load で rufus-scheduler ジョブを実行します。

統合テスト (rspec、capybara、selenium-driver) を実行すると、rufus-scheduler のタイムアウト エラーが原因で、一部のテストがランダムに失敗します。テスト環境で rufus-scheduler エラーを黙らせたり、rufus を完全に無効にしたりする方法はありますか? 私は自分のコードベースで rails_env=test を実行するのが好きではないので、他の解決策をいただければ幸いです。

サンプル エラーは次のようになります。

{ 283064 rufus-scheduler intercepted an error:
  283064   job:
  283064     Rufus::Scheduler::EveryJob "10s" {}
  283064   error:
  283064     283064
  283064     Timeout::Error
  283064     Waited 3 sec
4

1 に答える 1

0

rufus-scheduler #on_error が役に立ちます。https://github.com/jmettraux/rufus-scheduler#rufusscheduleron_errorjob-errorで文書化されています

例えば:

if rails_env == 'test' # set the handler only when testing...
  def Dashing.scheduler.on_error(job, error)
    # keep silent, do nothing
  end
end

統合テストのために Rails env を「test」に設定したくないようです。そのため、スケジューラの #on_error メソッドをいつオーバーライドするかを決定する方法を見つける必要があります。それが問題です。

また、rufus-scheduler は Timeout::Error のインスタンスを発生させず、Rufus::Scheduler::TimeoutError のインスタンスを発生させるため、表示されるエラーは rufus-scheduler エラーではなく、単に rufus-scheduler によって傍受されます。

上でコメントしたように、rufus-scheduler の作成者として、「Rufus スケジューラーが統合テストを壊す」のようなタイトルを読むために rufus-scheduler を書いたわけではありません。責任を取ってください。

于 2014-05-21T06:08:09.590 に答える