ここ数週間、問題を解決しようとしています。Rails アプリの rspec テストを実行していますが、理解できないエラーが 1 つある以外は問題なく動作しています。
- InnoDB エンジンで MySQL を使用しています。
config.use_transactional_fixtures = true
spec_helper.rbに設定しました- コマンドを使用して、テスト フィクスチャを手動でロードします
rake spec:db:fixtures:load
。 - rspec テストは BackgrounDRb ワーカー向けに作成されており、(state_machine gem を介して) レコードの状態を更新できることをテストしています。
これが私の問題です:
というモデルがありListings
ます。rspec テストは、update_sold_items
というファイル内のメソッドを呼び出しますlisting_worker.rb
。このメソッドはlisting.sell
特定のレコードを呼び出し、リスト レコードの「状態」列を「販売済み」に設定します。これまでのところ、これはすべて正常に機能していますが、update_sold_items
メソッドが終了すると、rspec テストはここで失敗します。
listing = Listing.find_by_listing_id(listing_id)
listing.state.should == "sold"
expected: "sold",
got: "current" (using ==)
状態の変化が持続しない理由を突き止めようとしていますが、ほとんど失われています。update_sold_items
テスト中にメソッドに配置したデバッグ コードの結果を次に示します。
pp listing.state # => "current"
listing.sell!
listing.save!
pp listing.state # => "sold"
listing.reload
pp listing.state # => "current"
reload
なぜそれが完全にうまく保存されるのか理解できませんが、呼び出すたびに元のレコードに戻りますListing.find
.
これを読んでくれてありがとう。十分な情報を提供していない場合は、質問してください。
助けてくれてありがとう、ネイサン・B
PS他のクラスの新しいレコードを作成し、それらのレコードをテストすることに問題はありません。データベースに既に存在するレコードを更新している場合にのみ問題になるようです。