0

私は次の仕様を持っています:

it 'should find and associate thumbnail and video for article with an episode with the first alpha-numerically matching files it finds' do

  @article = FactoryGirl.create(:pending_assets_article, id: 1)
  @episode1 = FactoryGirl.create(:episode, topic_id: @topic.id, article_id: @article.id, position: 1)
  @article.video.should be_nil
  @article.thumbnail.image.should be_blank
  @article.state.should == 'pending assets'

  run_rake_task

  Delayed::Job.count.should == 2
...
end

独特なのは、この仕様はUbuntuでは問題なく合格しますが、Mac OSXLionでは失敗して次のように表示されexpected 2, got 0ます。

何が得られますか?

より多くのコンテキストを提供するために、より多くの周囲のコードを追加できれば幸いです。

4

1 に答える 1

0

rake タスクをどのように呼び出していますか? 別のプロセスにシェルアウトしている場合は、データストアでトランザクション境界に達している可能性があります。

理想的には、rspec コンテキスト内で rake タスクをソース/実行する必要があります。

require 'rake'
Rake::Task[name].invoke

たとえば、Postgres を DelayedJob キューのバックエンドとして実行し、rspec でデータのトランザクション ロールバックを使用している場合、テスト セットアップ用の 1 つのトランザクションにテスト データがあり、rake タスクにシェル アウトし、トランザクションの外部でデータを変更します。 、テストと元のトランザクションに戻り、データを「見る」ことができません。

さらに、データ ストア内のキューのサイズをクエリするよりも、モックと期待値を使用して、コードが DelayedJob でジョブをキューに入れていることを確認する方が簡単な場合があります。

于 2012-09-19T18:58:04.240 に答える