2016-12-30 3 views
0

たとえば、DB内で何かを探しています。Model.find_by(slug: :name)。そして、それは地元のenvでうまくいきますが、テストではそれは私に無用です。 (私はそれを三重にチェックし、dbにレコードがあります)。Railsはdb内のレコードを見つけることができません(実際には存在します)。

ログを表示するためにdebugを追加しました。そして私がModel.where(slug: :name).countをしたら、それは私に0を返します。しかし、レコードはこのスラグの名前で本当に存在します。

この問題を解決するにはどうすればよいですか?

+1

開発データベースとテストデータベースが同じであることを確認しましたか? –

+0

* "私はそれを3回チェックして、データベースにレコードがあります" *テストされたデータベースまたは開発データベースは、デフォルトでは一般的にデータベースとデザインが異なるため、チェックされています。 – engineersmnky

+0

いいえ、ありません。しかし、私は要求されたレコードが存在するかどうかを調べたたとえば、私はデバッガを追加しました。「request.slug」を使用すると「管理」が返され、サーバーDBのテストに入り、スラッグ「管理」のレコードが見つかりました。レコードが存在する。 –

答えて

0

テストを実行すると、Railsは異なるデータベースを使用します。一般的な規則は、projectname_developmentとprojectname_test(そしてprojectname_production)です。

一般的に、テストシステムでは、テストを実行する前にテストデータベースもクリアされます。これは2つの理由によるものです。

  • テストを通じて開発データベースを混乱させたくありません。多くの開発者は、開発プロセス中にテストを継続して実行できます。
  • あなたが書いた1回のテストはすべて、周囲のデータとは独立して、それ自身のために機能するはずです。

1回のテストごとにテストデータを設定する必要があります。あなたはあなたが使っているテストシステムについて言及していませんでした。

FixturesFactory Girlをご覧ください。

+0

申し訳ありませんが、それほどのものではありません。私はこれについて知っている。 'Model.find_by(slug :: name) 'がどのように可能であるのかは、レコードが実際にモデルテーブルに存在する場合は返されません。 –

0

テストデータベースに格納されたデータは一時的なもので、テストが終了した後に削除されます。 開発データベースは、テストデータベースとは独立しています。

関連する問題