正如受试者所说。似乎实现的代码总是create
一个新的记录而不是现有的记录。
这是我的rspec测试代码:
describe "#from_facebook" do
it "return existing related user" do
existing_user = FactoryGirl.create(:user)
user_from_facebook = User.from_facebook({ uid: existing_user.uid })
expect(user_from_facebook.email).to eql existing_user.email
end
end
这是测试实现:
def self.from_facebook(fb_auth)
where(provider: "facebook", uid: fb_auth[:uid]).first_or_create do |user|
user.email = fb_auth[:email]
user.password = Devise.friendly_token[0, 20]
end
end
我总是这样:
1) User#from_facebook return existing related user
Failure/Error: expect(user_from_facebook.email).to eql existing_user.email
expected: "karolann.gulgowski@satterfield.us"
got: nil
(compared using eql?)
# ./spec/models/user_spec.rb:48:in `block (3 levels) in <top (required)>'
以下是通过puts的控制台结果。
existing_user
:
#<User id: 105, email: "karolann.gulgowski@satterfield.us", encrypted_password: "$2a$04$90uzEdbwfnqfUL0CDhNOH.THUbzovFyJK1OPg7VcgxL...", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 0, current_sign_in_at: nil, last_sign_in_at: nil, current_sign_in_ip: nil, last_sign_in_ip: nil, created_at: "2015-08-30 04:12:59", updated_at: "2015-08-30 04:12:59", auth_token: "vkvm2-fLe5x1dZGbewqw", provider: nil, uid: "133290925">
代表user_from_facebook
:
#<User id: nil, email: nil, encrypted_password: "$2a$04$lxdBWBsXY4febfgurgHJKOdNcOMCuQQO2DHshWChnxA...", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 0, current_sign_in_at: nil, last_sign_in_at: nil, current_sign_in_ip: nil, last_sign_in_ip: nil, created_at: nil, updated_at: nil, auth_token: "", provider: "facebook", uid: "133290925">
请告诉我这里有什么问题。提前谢谢。
答案 0 :(得分:1)
您的User
工厂未完全设置用户。它会创建以下user
对象:
#<User id: 105,
email: "karolann.gulgowski@satterfield.us",
encrypted_password: "$2a$04$90uzEdbwfnq...",
reset_password_token: nil,
reset_password_sent_at: nil,
remember_created_at: nil,
sign_in_count: 0,
current_sign_in_at: nil,
last_sign_in_at: nil,
current_sign_in_ip: nil,
last_sign_in_ip: nil,
created_at: "2015-08-30 04:12:59",
updated_at: "2015-08-30 04:12:59",
auth_token: "vkvm2-fLe5x1dZGbewqw",
provider: nil,
uid: "133290925"
请注意,提供商为nil
。因此,您的from_facebook
方法(查找提供商的uuid 和)无法找到该用户。
作为解决方案,请使用以下内容在规范中创建existing_user
:
existing_user = FactoryGirl.create(:user, provider: 'facebook')
答案 1 :(得分:0)
您是否在uid
设置了FactoryGirl.create(:user)
?
您可以发布user
工厂的内容吗?您可能想要创建一个设置唯一facebook_user
uid
工厂