我正在为 Facebook 集成编写测试。当我运行 rspec 时,出现以下错误
Failure/Error: before { click_link "Sign in with Facebook" }
NoMethodError:
undefined method `provider' for #<Hash:0x007fbe98511798>
# ./app/models/user.rb:55:in `from_omniauth'
我的 OAuth 模拟包含
OmniAuth.config.test_mode = true
OmniAuth.config.mock_auth[:facebook] = {
'uid' => "999999",
'provider' => "facebook",
'extra' => {
'user_hash' => {
'email' => 'test@gmail.com',
'first_name' => 'First',
'last_name' => 'Last',
'gender' => 'Male'
}
},
'credentials' => {
'token' => "token1234qwert"
}
}
它显然打破的确切地方是
def self.from_omniauth(auth)
where("fb_provider = ? and fb_uid = ?", auth.provider, auth.uid.to_s).first_or_initialize.tap do |user|
但是,当我执行 aputs auth.to_yaml
作为第一行时,from_omniauth(auth)
它会显示provider: facebook
我在模拟身份验证中包含的所有其他内容。我在这一点上迷路了。任何建议或帮助将不胜感激。谢谢。