运行rspec测试时不存在关系

时间:2011-11-28 21:06:42

标签: ruby-on-rails ruby rspec

我在group_spec.rb文件中有这个:

describe Group do
  it { should have_many(:users) }
end

这在我的user_spec.rb文件中:

describe User do
  it { should belong_to(:group) }
end

当我运行测试时,我得到:

Failure/Error: it { should have_many(:users) }
ActiveRecord::StatementInvalid:
PGError: ERROR:  relation "users" does not exist

   LINE 4:              WHERE a.attrelid = '"users"'::regclass
                                           ^
   :             SELECT a.attname, format_type(a.atttypid, a.atttypmod), d.adsrc, a.attnotnull
                 FROM pg_attribute a LEFT JOIN pg_attrdef d
                   ON a.attrelid = d.adrelid AND a.attnum = d.adnum
                WHERE a.attrelid = '"users"'::regclass
                  AND a.attnum > 0 AND NOT a.attisdropped
                ORDER BY a.attnum

在我的group.rb文件中,我有:

has_many :users

在我的users.rb文件中,我有:

belongs_to :group

我觉得我错过了一些显而易见的事情。任何帮助,将不胜感激。谢谢!

约翰

2 个答案:

答案 0 :(得分:24)

有同样的问题并在cuvius的评论中使用了解决方案。在这里发帖,以便人们不要错过它!

运行:RAKE_ENV=test rake db:migrate:reset db:test:prepare以设置测试数据库。

答案 1 :(得分:1)

不幸的是 rake db:test:prepare rails 4 + 中已弃用,所以现在不是最佳解决方案。
我想在您的用户工厂类中写为用户。出现问题的原因是工厂在迁移完成之前加载 所以要解决这个问题:

更改工厂类名称
factory :user, class: User do
  # ...
end

factory :user, class: 'User' do
  # ...
end