Rubyのテストツールcucumberのテストでデータベースのデータが取得できないエラーになってしまいます。Rails3で使っています。

アクションで @customer = Customer.find(1) とDBアクセスし、@customerをビューに渡し、ビューではその@customer.codeという情報を表示しようとしています。
RAILS_ENV=test環境のsqlite3のデータベースにデータ投入後rake cucumberしています。
このエラー後、そのテストデータはなぜか無くなっています。なぜうまくデータベースの情報が取得できないのでしょうか。

▼ エラー内容
シナリオ: (省略)
前提"情報登録"ページを表示している
Couldn't find Customer with ID=1 (ActiveRecord::RecordNotFound)
./app/controllers/customers_controller.rb:17:in `show'
人力検索の文字数制限のため、いろいろ省略しました。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2011/04/29 22:36:43
  • 終了:2011/04/30 00:55:48

ベストアンサー

id:nuna No.1

nuna回答回数32ベストアンサー獲得回数112011/04/29 23:52:22

ポイント60pt

cucumberに限らず、railsのテストは一単位のテストを実行するたびにDBの中身を初期化します。

初期化されないならば、DBの中身を変更するテストがあると他のテストの結果に影響してしまうからです。

test用のDBはrake testなりrake cucumberしたときにdevelopment環境のDBのスキーマから作成され、中身も初期化されます。

ですので、fixtureを用意して置いて最初にまとめてデータを作成するようにするか、個々のテスト実行時に必要なデータをその場で作成するかします。

rails2での記事ですが参考になると思います。

http://ryus.co.jp/modules/d3blog/details.php?bid=220

id:kitokitoki

情報ありがとうございました。fixture は用意してあるのですが、初期化は行なわれるもののそれがなぜか読み込まれていない、ということみたいです。

追記です。

web_steps_ja.rb に以下を追記することで解決しました(正しい方法かは不明です)。

Before do

Fixtures.create_fixtures("test/fixtures", "customers")

end

適切なアドバイスをありがとうございました。

2011/04/30 00:42:18

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません