人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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'
人力検索の文字数制限のため、いろいろ省略しました。


●質問者: mori_dev
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:ActiveRecord Cucumber dB rake Ruby
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● nuna
●60ポイント ベストアンサー

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

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

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

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

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

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

◎質問者からの返答

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

追記です。

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

Before do

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

end

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ