rspec返回"PG ::错误:错误:关系"table_name"不存在"

ino*_*iro 11 postgresql rspec rspec2 ruby-on-rails-3 rails-postgresql

环境是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"
Run Code Online (Sandbox Code Playgroud)

我正在使用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
Run Code Online (Sandbox Code Playgroud)

我读到了关于这个错误的类似问题.所以我试过rake db:test:prepare或者rake db:test:load,但它没有解决.你有什么主意吗?看起来测试没有在测试数据库上运行......我该怎么办?:(

jef*_*unt 26

我在两个实例中遇到过这种情况(2012年6月13日更新):

第一:

我还没有迁移我的测试数据库......

rake db:migrate

...你既需要之前做db:test:preparedb:test:load.

无论如何,当您调用rspec时,它应该prepareload您的数据库一样.你不应该手动这样做.

第二:

我的迁移中的拼写错误.我不小心在参数列表中反转了我的表名和列名.

在Rails 3.1项目上迁移:

def change
  add_column :had_import_errors, :studies, :boolean, :default => false
  add_column :import_data_cache, :studies, :text
end
Run Code Online (Sandbox Code Playgroud)

...这是错误的,因为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
Run Code Online (Sandbox Code Playgroud)

  • +1 $ rake db:test:准备刚刚为我工作 (5认同)
  • 这是我匆匆忘记的"rake db:test:load".谢谢. (2认同)