Как я могу сделать интеграционное тестирование с помощью твиттера и капибары? - PullRequest
1 голос
/ 29 ноября 2011

Я пишу пример приложения, использующего Devise + OmniAuth для входа в систему и щебетание для получения имени пользователя. Я хотел бы добавить несколько интеграционных тестов, но я не знаю, что делать с жемчужиной Twitter.

Вот моя пользовательская модель (в которой находится большая часть логики):

def build_authentication(omniauth)
  # If the provider is twitter, get additional information                    
  # to build a user profile.                                                  
  if omniauth['provider'] == 'twitter'         
    self.build_twitter(omniauth)
  end

  # now put the authentication in the database                                
  authentications.build(:provider => omniauth['provider'],
                        :uid => omniauth['uid'],
                        :token => omniauth['credentials']['token'],
                        :secret => omniauth['credentials']['secret'])
end
def build_twitter(omniauth)
  Twitter.configure do |config|
    config.consumer_key = TWITTER_KEY
    config.consumer_secret = TWITTER_SECRET
    config.oauth_token = omniauth['credentials']['token']
    config.oauth_token_secret = omniauth['credentials']['secret']
  end
  client = Twitter::Client.new
  self.name = client.current_user.name
end

Я добавил следующее в мой spec_helper.rb, чтобы пройти часть входа в интеграционный тест:

OmniAuth.config.test_mode = true
OmniAuth.config.mock_auth[:twitter] = {
  'provider' => 'twitter',
  'uid' => '12345',
  'credentials' => {
    'token' => '12345',
    'secret' => '54321'
  }
}

Но я не могу понять, как проверить метод build_twitter, который использует драгоценный камень twitter. Любая помощь будет принята с благодарностью.

Спасибо!

1 Ответ

2 голосов
/ 29 ноября 2011

Мое первое замечание: вы можете получить их имя в твиттере без жемчужины твиттера. Я переименовал поля (twitter_handle, real_name), чтобы они были конкретными.

self.twitter_handle ||= omniauth['user_info']['nickname']
self.real_name = omniauth['user_info']['name']

Затем вы можете проверить это в тестовом режиме omniauth. Где-нибудь в вашем огурце до хуков или помощников rspec

  OmniAuth.config.test_mode = true

  # the symbol passed to mock_auth is the same as the name of the provider set up in the initializer
  OmniAuth.config.mock_auth[:twitter] = {
    "provider"=>"twitter", 
    "uid"=>"1694349", 
    "credentials"=>{
      "token"=>"165349-aRlUJ7TeIb4Ak57oqycgwihqobrzQ0k5EI7", 
      "secret"=>"SNZT7S70xZIhANfZzgHUEpZMPSsGEHw"
    }, 
    "user_info"=>{"nickname"=>"joshcrews", "name"=>"Josh Crews", "location"=>"Nashville, TN", "image"=>"http://a3.twimg.com/profile_images/1076036384/josh_profile_franklin_normal.jpg", "description"=>"Christian, Nashville web developer, Ruby", "urls"=>{"Website"=>"http://www.joshcrews.com", "Twitter"=>"http://twitter.com/joshcrews"}}
  }

Чтобы проверить, просто подтвердите / подтвердите, что имя вашего пользователя теперь "joshcrews" или "Josh Crews" в зависимости от того, что вы ищете

...