环境是REE(2011.12)关于rvm,rspec 2.8.0,rails 3.0.6和pg 0.13.2。在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
,但这不是解决方案。你有什么主意吗?
看起来测试没有在测试数据库上运行......我该怎么办? :(
答案 0 :(得分:26)
我在两个实例中遇到过这个问题(2012年6月13日更新):
我还没有迁移我的测试数据库...
rake db:migrate
...您需要在db:test:prepare
和db:test:load
之前完成。
当您调用rspec时,无论如何都应该prepare
和load
您的数据库。你不应该手动这样做。
我移民中的拼写错误。我不小心在参数列表中颠倒了我的表名和列名。
在Rails 3.1项目上进行迁移:
def change
add_column :had_import_errors, :studies, :boolean, :default => false
add_column :import_data_cache, :studies, :text
end
... 错误,因为has_import_errors
和import_data_cache
是我的列名,因此它们应该排在第二位,而不是第一位。
正确的迁移,首先是表名:
def change
add_column :studies, :had_import_errors, :boolean, :default => false
add_column :studies, :import_data_cache, :text
end
答案 1 :(得分:4)
当你在迁移时运行rspec(通常是通过防护)时,通常会发生这种情况。一个简单的解决方案是退出防守,进行迁移并重新启动防护。
答案 2 :(得分:3)
它通常表示存在另一个打开的PostgreSql连接。要冒出正确的错误,请尝试% rake db: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)
答案 3 :(得分:1)
只是点击同样的错误,没有任何效果,但删除并重新创建数据库,这为我修复了。
rake db:drop db:create db:migrate