Простой пример для omniauth-facebook, devise, capybara, capybara-mechanize, vcr, rpsec интеграционного теста? - PullRequest
3 голосов
/ 26 февраля 2012

Я ищу простой пример для omniauth-facebook, devise, capybara, capybara-mechanize (возможно, с видеомагнитофоном) и интеграционного теста rpsec ...

Capybara не может подключиться к внешнему веб-сайту. Таким образом, капибара-механизация была бы необходима. Может быть, видеомагнитофон может ускорить процесс. Эта ссылка описывает, как получить тестовые пользователи Facebook: https://developers.facebook.com/docs/test_users/

Использование макета, как описано в документе omniauth, хорошо подходит для тестирования логики модели и контроллера. Для этого требуется следующий код в specs / helpers / omniauth.rb и вызов set_omniauth в: before вашего интеграционного теста rspec.

Однако было бы неплохо иметь настоящий интеграционный тест, который запускается на серверах Facebook. Конечно, вы хотите пометить такие медленные тесты, чтобы они не выполнялись через охрану и грабли по умолчанию. .

# You can read about this gist at: http://wealsodocookies.com/posts/how-to-test-facebook-login-using-devise-omniauth-rspec-and-capybara
# which is for twitter. Below is for facebook

def set_omniauth(opts = {})
  default = {:provider => :facebook,
             :uuid     => "1234",
             :facebook => {
                 :email => "foobar@example.com",
                 :gender => "Male",
                 :first_name => "foo",
                 :last_name => "bar",
                 :nickname => "foo bar",
                 :image => 'http://graph.facebook.com/659307629/picture?type=square'
             }
  }

  credentials = default.merge(opts)
  provider = credentials[:provider]
  user_hash = credentials[provider]

  OmniAuth.config.test_mode = true

  h = {
    'provider' => provider,
    'uid' => credentials[:uuid],
    'info' => user_hash,
    "extra" => {
        "info" => user_hash
    }
  }

  OmniAuth.config.mock_auth[provider] = CollectionUtility.deep_stringify_keys(h)


end

def set_invalid_omniauth(opts = {})

  credentials = { :provider => :facebook,
                  :invalid  => :invalid_crendentials
                 }.merge(opts)

  OmniAuth.config.test_mode = true
  OmniAuth.config.mock_auth[credentials[:provider]] = credentials[:invalid]

end
...