我有以下型号的
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
attr_accessible :email, :password, :password_confirmation, :remember_me, :company_id
end
class Company < ActiveRecord::Base
attr_accessible :email, :name
end
#test/factories/companies.rb
FactoryGirl.define do
factory :company do
name "sample company"
email "sample@company.com"
end
end
#test/factories/users.rb
FactoryGirl.define do
factory :user do |u|
u.email 'sameera@sample.com'
u.password 'welcome'
u.password_confirmation 'welcome'
u.association :company, :factory => :company
end
end
#spec/models/user_spec.rb
require 'spec_helper'
describe User do
describe "Validations" do
it "should validate the email" do
user = FactoryGirl.build(:user, :email => nil)
user.should have(1).error_on(:email)
end
end
end
但我得到了这个错误,与后卫(甚至在重新启动后卫)
15:47:35 - INFO - Running: spec/models/user_spec.rb
Running tests with args ["--drb", "-f", "progress", "-r", "/home/sameera/.rvm/gems/ruby-1.9.2-p290/gems/guard-rspec-2.4.0/lib/guard/rspec/formatter.rb", "-f", "Guard::RSpec::Formatter", "--failure-exit-code", "2", "spec/models/user_spec.rb"]...
F
Failures:
1) User Validations should validate the email
Failure/Error: user = FactoryGirl.build(:user, :email => nil)
NoMethodError:
undefined method `company=' for #<User:0x00000004dcee08>
# ./spec/models/user_spec.rb:6:in `block (3 levels) in <top (required)>'
Finished in 0.16308 seconds
1 example, 1 failure
Failed examples:
rspec ./spec/models/user_spec.rb:5 # User Validations should validate the email
Randomized with seed 26095
Done.
您的User
模型没有像工厂假设的那样声明belongs_to关联:
你应该添加它:
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
attr_accessible :email, :password, :password_confirmation, :remember_me, :company_id
belongs_to :company
end
当然,这假设您的用户表有一个company_id
列(但我猜您已经添加了它,正如您在attr_accessible中列出的那样)