rspec失败 - “无法找到表”,但是rake db:test:prepare没有修复它

时间:2012-01-27 20:49:45

标签: ruby-on-rails ruby-on-rails-3 rspec rake

我一直在做一个需要多次迁移的主要重构。突然间,rspec失败了。

Could not find table 'users' (ActiveRecord::StatementInvalid)

users表就在schema.rb中:

  create_table "users", :primary_key => "user_id", :force => true do |t|
    t.string   "first_name",          :limit => 100,                                    :null => false
    t.string   "last_name",           :limit => 100,                                    :null => false
    (...)
    t.boolean  "current_student",                    :default => true,                  :null => false
    t.boolean  "unregistered",                       :default => false,                 :null => false
  end

这是我尝试过的:

  • rake db:test:prepare:无变化
  • 删除schema.rb并使用rake db:schema:dump重新创建:无更改

我的应用程序运行正常 - 我可以创建用户,登录,注销等等。但是我的测试都没有用。我接下来应该尝试什么?

2 个答案:

答案 0 :(得分:4)

运行rake db:test:load而不是从schema.rb文件

创建测试数据库
  

rake db:test:load从当前的db / schema.rb重新创建测试数据库。在后续尝试中,首先运行db:test:prepare是一个好主意,因为它首先检查挂起的迁移并适当地发出警告。

更多信息:http://guides.rubyonrails.org/testing.html#preparing-your-application-for-testing

答案 1 :(得分:0)

发现了这个问题。

在我的一个模型中,我写了一个范围:

scope :registered, where(:registered => true)

在堆栈跟踪深处,实际上存在对此行的引用。我将范围更改为:

scope :registered, :conditions => {:registered => true}

......一切顺利。呼。