测试一个模型“belongs_to”另一个模型

时间:2012-03-21 13:11:56

标签: ruby-on-rails ruby-on-rails-3 rspec rspec2 belongs-to

我有两个模型 - 租户和用户,每个租户都会有很多用户,我正在尝试找到一种方法来测试创建用户和自动分配租户的能力。当我尝试运行测试时,我收到以下错误:

NoMethodError:
  undefined method 'reflect_on_association' for Proc:Class

租户代码:

class Tenant < ActiveRecord::Base
attr_accessible :name, :billing_email, :country

validates :name,       :presence => true,
                       :length => { :maximum => 75 },
                       :uniqueness => true

validates :billing_email, :email => true

has_many :users
end

用户代码:

class User < ActiveRecord::Base
attr_accessible :email, :first_name, :last_name, :password, :tenant_id

validates :email,       :presence => true,
                        :uniqueness => true,
                        :email => true

validates :first_name,  :presence => true,
                        :length => { :maximum => 50 }

validates :last_name,   :presence => true,
                        :length => { :maximum => 50 }

validate :password_validation

has_many :sessions, :dependent => :destroy
belongs_to :tenant  

end

测试尝试:

lambda do
  @attr = FactoryGirl.attributes_for(:user)
  post users_path, :user => @attr
  response.should be_success
end.should belong_to(:tenant)

1 个答案:

答案 0 :(得分:0)

你在这里想要达到的目标并不是特别清楚。断言一个对象“belongs_to”另一个闻起来很糟糕。你真的关心belongs_to被用于协会吗?很多时候,似乎rspec测试最终会复制测试中的代码而不会实际测试任何有用的东西。

您更有可能想知道POST到控制器的结果是否产生了正确的结果。既然你没有向我们展示你的控制器,而且我认为RSpec是毫无意义的噪音,这就是我要解决的问题。

assert_difference ->{User.count} do
  post: users_path, user: FactoryGirl.attributes_for(:user)
end
# Assuming your users table is cleared before each test..
assert_kind_of Tenant, User.first.tenant