1

Railsでrspecを実行するためにmysql dbを使用していました。factoryGirl を使用してオブジェクトを作成した後、それを破棄して、次の仕様実行のためにデータベースがクリーンに見えるようにしたいと考えています。私の仕様で設定する方法は次のとおりです。

before (:each) do
  User.destroy_all
  @user = Factory.create :user
end

after (:each) do
 @user.destroy
end

rspec の実行中にエラーが発生しました:

Failure/Error: @user.destroy_all
 NameError:
   uninitialized constant User::connection

Failure/Error: @user.destroy
 NameError:
   uninitialized constant User::connection

ユーザーモデルでセットアップ:dependent => :destroyします ここで何が問題なのですか?

4

1 に答える 1

0

問題は、@user クラス変数で参照されるオブジェクトが「初期化されていない定数」であることです。IE、FactoryGirl は正常に動作していますが、変数が @user オブジェクトを正しくインスタンス化していません。接続がデータベース テーブル フィールドでない場合、接続への参照がある可能性があります。

MySQL の問題である場合、ActiveRecord に関連するエラー メッセージが表示されます。

テストの前後にデータベースをクリーンアップしたい場合は、この gem を使用してみてください。それはうまくいきます。 http://rubygems.org/gems/database_cleaner

RailsプロジェクトでRSpecを使用して構成した方法は次のとおりです。

RSpec.configure do |config|        
  config.before(:suite) do
    DatabaseCleaner.strategy = :transaction
    DatabaseCleaner.clean_with(:truncation)
  end
  config.before(:each) do
    DatabaseCleaner.start
  end
  config.after(:each) do
    DatabaseCleaner.clean
  end
end
于 2012-08-28T19:39:15.647 に答える