Ruby on rails 3 FactoryGirl,2次创建用户?
我真的不懂如何与人交往。我有一个特殊的助手Ruby on rails 3 FactoryGirl,2次创建用户?,ruby-on-rails-3,rspec,factory-bot,Ruby On Rails 3,Rspec,Factory Bot,我真的不懂如何与人交往。我有一个特殊的助手 def log_in_user user = User.find_by_name 'User1' user = FactoryGirl.create :user1 unless user sign_in user end 在rspec中 let(:product) { FactoryGirl.build :product_A } describe "GET confirm purchase" do it "xxx" do
def log_in_user
user = User.find_by_name 'User1'
user = FactoryGirl.create :user1 unless user
sign_in user
end
在rspec中
let(:product) { FactoryGirl.build :product_A }
describe "GET confirm purchase" do
it "xxx" do
log_in_user
Product.should_receive(:find_active_by_id).with("1").and_return(product)
...
end
end
工厂.rb
FactoryGirl.define do
factory :user do
encrypted_password 'abcdef1'
confirmed_at Time.now
factory :user1 do
email 'user1@test.com'
name 'User1'
year 1984
end
end
factory :product do
factory :product_A do
name "product A"
association :user, factory: :user1
end
end
end
运行测试用例时发生异常:
ActiveRecord::RecordInvalid:验证失败:已接收电子邮件
看起来user1创建了2次,一次在log\u in\u user中,第二次在factory中:association:user,factory::user1
我是对的?如果是,我如何解决这个问题?我想创建用户并在factory product中定义关联
最佳当您在工厂
:product\u A
时,它会自动呼叫工厂以获取:user1
然后,您再次在登录用户中创建:user1
,但对唯一电子邮件的验证阻止创建第二封:user1
我建议您将电子邮件设置为序列
,如下所示:
FactoryGirl.define do
sequence :email do |n|
"user#{n}@test.com"
end
factory :user do
encrypted_password 'abcdef1'
confirmed_at Time.now
factory :user1 do
email
name 'User1'
year 1984
end
end
factory :product do
factory :product_A do
name "product A"
association :user, factory: :user1
end
end
end
然后,我将更改登录用户
,将(可选)用户作为如下选项:
def log_in_user(user)
user =|| User.find_by_name 'User1'
user =|| FactoryGirl.create :user1
sign_in user
end
并修改测试用例以将该用户对象传递给登录:
let(:product) { FactoryGirl.build :product_A }
describe "GET confirm purchase" do
it "xxx" do
log_in_user(product.user)
Product.should_receive(:find_active_by_id).with("1").and_return(product)
end
end
我想这不是他最初的问题吗?@RyanBigg我读到的问题是他不明白为什么它试图创建两个用户。我详述了我可能会如何进行。