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