Testing 使用cucumber测试omniauth登录时没有哈希错误的方法uid

Testing 使用cucumber测试omniauth登录时没有哈希错误的方法uid,testing,twitter,cucumber,omniauth,uid,Testing,Twitter,Cucumber,Omniauth,Uid,我正在尝试编写集成测试,包括使用Omniauth(特别是Twitter)登录。每当运行Cucumber测试时,我都会遇到以下错误: 当我使用“Twitter”功能/step_definitions/steps.rb:5登录时 #的未定义方法uid'(命名错误) ./app/models/user.rb:26:infrom_omniauth' ./app/controllers/omniauth\u callbacks\u controller.rb:4:inall' ./features/ste

我正在尝试编写集成测试,包括使用Omniauth(特别是Twitter)登录。每当运行Cucumber测试时,我都会遇到以下错误:

当我使用“Twitter”功能/step_definitions/steps.rb:5登录时 #的未定义方法
uid'(命名错误)
./app/models/user.rb:26:in
from_omniauth' ./app/controllers/omniauth\u callbacks\u controller.rb:4:in
all'
./features/step_definitions/steps.rb:6:in
/^I使用“(.*?”$/”登录 功能/用户管理。功能:15:in`当我使用“Twitter”登录时'

下面是我的用户模型中的代码

def self.from_omniauth(auth)
    user = where(twitter_uid: auth.uid).first || check_for_non_twitter_login(auth)
    user.twitter_oauth_token = auth.credentials.token
    user.twitter_oauth_secret = auth.credentials.secret
    user.save! if user.email != ""
    user
end

def self.create_from_omniauth(auth)
    create do |user|
      user.provider = auth.provider
      user.twitter_uid = auth.uid
      user.twitter_username = auth.info.nickname
      user.twitter_oauth_token = auth.credentials.token
      user.twitter_oauth_secret = auth.credentials.secret
    end
end
我尝试通过将相关行更改为以下内容来更改uid值的访问方式:

user = where(twitter_uid: auth['uid']).first || check_for_non_twitter_login(auth)
这消除了那个错误,所以我更改了auth散列中所有提到的数据,以使用相同的方法。这破坏了代码在开发中的工作方式(它根本不工作),然后测试抛出了以下错误:

当我使用“Twitter”功能/step_definitions/steps.rb:5登录时 nil:NilClass(NoMethodError)的未定义方法 ./app/models/user.rb:56:increate\u from\u omniauth' ./app/models/user.rb:53:in
create\u from\u omniauth'
./app/models/user.rb:38:in
检查是否有非twitter登录信息' ./app/models/user.rb:26:in
from_omniauth'
./app/controllers/omniauth\u callbacks\u controller.rb:4:in
all' ./features/step_definitions/steps.rb:6:in
/^I使用“(.*?”$/”登录
功能/用户管理。功能:15:in
当我使用“Twitter”登录时


有人知道我做错了什么吗?

找到了解决办法。而不是使用:

OmniAuth.config.mock_auth ...etc
我用过:

OmniAuth.config.add_mock(:twitter, {"uid" => '12345', "credentials" => {"token" => "mytoken","secret" => "mysecret"} })
现在一切都好了