11

環境は、rvm、rspec 2.8.0、rails 3.0.6、および pg 0.13.2 の REE(2011.12) です。CentOS 5.6 で PostgreSQL 8.3.17 を使用しています。db:migrate は正しく機能します。しかし、rspec には次のエラーがあります。

1) ApiController articles OK
 Failure/Error: Unable to find matching line from backtrace
 ActiveRecord::StatementInvalid:
   PG::Error: ERROR:  relation "table_name" does not exist
   : DELETE FROM "table_name"

プロジェクトをrspec 1.xシリーズのrails 2.3.5からrspec2のrails 3.0に更新しています。すべての rspec テストをコピーし、古い spec_helper.rb と新しいもの (生成されたものrails g rspec:install) をマージしました。

ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'rspec/autorun'

Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}

RSpec.configure do |config|

  config.fixture_path = "#{::Rails.root}/spec/fixtures"
  config.use_transactional_fixtures = true

end

このエラーについて同様の質問を読んだので、rake db:test:prepareまたは試してみましrake db:test:loadたが、解決しません。何か考えはありますか?テスト データベースでテストが実行されていないようです...どうすればよいですか? :(

4

4 に答える 4

26

私はこれに 2 つのインスタンスで遭遇しました (2012 年 6 月 13 日更新)。

初め:

まだテスト データベースを移行していません...

rake db:migrate

... と の両方の前に行う必要がありdb:test:prepareますdb:test:load

rspec を呼び出すと、とにかくデータベースが必要prepareになります。load手動で行う必要はありません。

2番:

私の移行のタイプミス。パラメーター リストでテーブル名と列名を誤って逆にしてしまいました。

Rails 3.1 プロジェクトでの移行:

def change
  add_column :had_import_errors, :studies, :boolean, :default => false
  add_column :import_data_cache, :studies, :text
end

...これは間違っています。has_import_errorsimport_data_cacheは私の列名であり、したがって、最初ではなく 2 番目に来る必要があります。

テーブル名が最初の正しい移行は次のとおりです。

def change
  add_column :studies, :had_import_errors, :boolean, :default => false
  add_column :studies, :import_data_cache, :text
end
于 2012-03-15T20:11:08.927 に答える
4

これは通常、移行中に rspec を実行している場合に発生します (通常はガードを介して)。簡単な解決策は、ガードを終了し、移行を実行してガードを再起動することです。

于 2013-02-15T09:54:32.643 に答える
3

通常、別の開いている PostgreSql 接続があることを示します。正しいエラーをバブルアップするには、試してください% rake db:test:prepare

test prepare を実行すると、以下が表示され、開いている接続 (私の場合は PGAdmin) が閉じられると、問題は解決されました。

rake aborted!
PG::Error: ERROR:  database "xyz_test" is being accessed by other users
DETAIL:  There are 1 other session(s) using the database.
: DROP DATABASE IF EXISTS "xyz_test"

Tasks: TOP => db:test:load => db:test:purge
(See full trace by running task with --trace)
于 2012-03-19T08:34:39.787 に答える
1

この同じエラーが発生しただけで、データベースを削除して再作成する以外に何も機能しませんでした。これで修正されました。

rake db:drop db:create db:migrate

于 2015-01-27T17:36:43.937 に答える