【发布时间】:2014-09-12 12:35:05
【问题描述】:
我正在尝试在我的 rails 应用程序中测试销毁操作。我使用 Factory_girl 创建对象。 创建公司对象时,必须添加用户关系。但这就是我尝试使用 Factory_girl 创建公司时失败的地方。
user_spec.rb
describe User do
before(:each) { @user = User.new(email: 'user@example.com') }
subject { @user }
it { should respond_to(:email) }
it { should respond_to(:companies) }
it "#email returns a string" do
expect(@user.email).to match 'user@example.com'
end
describe "company associations" do
let!(:a_company) do
FactoryGirl.create(:company, user: @user)
end
it {should have_many :companies, :dependent => :destroy}
end
end
工厂.rb
FactoryGirl.define do
factory :user do
confirmed_at Time.now
name "Test User"
email "test@example.com"
password "please123"
trait :admin do
role 'admin'
end
end
factory :company do
name "Total Inc."
user :user
end
end
模型/用户.rb
class User < ActiveRecord::Base
has_many :companies, dependent: :destroy
enum role: [:user, :vip, :admin]
after_initialize :set_default_role, :if => :new_record?
def set_default_role
self.role ||= :user
end
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :invitable, :database_authenticatable, :registerable, :confirmable,
:recoverable, :rememberable, :trackable, :validatable
end
模型/公司.rb
class Company < ActiveRecord::Base
belongs_to :user
validates :user_id, presence: true
end
我得到的错误:
失败:
1) User company associations
Failure/Error: FactoryGirl.create(:company, user: @user)
ActiveRecord::RecordInvalid:
Validation failed: User can't be blank
编辑
我遵循了下面的建议,现在我可以创建但出现以下错误:
Failure/Error: it {should have_many :companies, :dependent => :destroy} expected #<User:0x007fc7b7ce08c0> to respond to has_many?
【问题讨论】:
-
@user总是nil你应该在before(:each)块中使用create而不是new。公司从不创造,因为@user总是nil。 -
尝试使用
let而不是let! -
在你公司的工厂里应该只是
user而不是user :user -
@BroiSatse 这也可能有问题,但
User.new.id == nil和公司未创建,验证:user_id存在失败。 -
@gtheys 应该是
it { should have_many(:companies).dependent(:destroy) }look carefully doc
标签: ruby-on-rails ruby ruby-on-rails-4 factory-bot rspec-rails