Rails/Cucumber — тестирование ошибок хостинга omniauth (поставщик: facebook) — (URI::InvalidComponentError)

Я столкнулся с ошибкой, пытаясь настроить omniauth для целей тестирования интеграции с огурцом (я настроил Omniauth через Devise, как указано в вики)

Пожалуйста, смотрите ниже:

Scenario: Test                       # features/omniauth.feature:3
  Given I am signed in with facebook # features/step_definitions/omniauth_steps.rb:1
    bad component(expected host component): http://www.example.com (URI::InvalidComponentError)
    /Users/benoit/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/uri/generic.rb:395:in `check_host'
    /Users/benoit/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/uri/generic.rb:409:in `host='
    ./features/step_definitions/omniauth_steps.rb:2:in `/^I am signed in with facebook$/'
    features/omniauth.feature:4:in `Given I am signed in with facebook'
  Then I open the page               # features/step_definitions/debug_steps.rb:5

Вот мои файлы:

omniauth.feature

Feature: OmniAuth

  Scenario: Test
    Given I am signed in with facebook
    Then I open the page

omniauth_steps.rb

Given /^I am signed in with facebook$/ do
  visit "/auth/facebook"
end

support/env.rb

OmniAuth.config.test_mode = true
OmniAuth.config.mock_auth[:facebook] = {
  'uid' => '12345',
  "user_info" => {
    "email" => "[email protected]",
    "first_name" => "foo",
    "last_name" => "Bar"
  }
}

инициализатор/devise.rb

case 
  when Rails.env.production?
    config.omniauth :facebook, 'XXXX', 'XXXX', 
    {:scope => 'email, offline_access', :client_options => {:ssl => {:ca_file => '/usr/lib/ssl/certs/ca-certificates.crt'}}}
  when Rails.env.development?
    config.omniauth :facebook, 'XXXX', 'XXXX'
  when Rails.env.test?
    config.omniauth :facebook, 'XXXX', 'XXXX'
        OmniAuth.config.full_host = 'http://example.com' # issue 257  
end

(Ссылка: выпуск 257)

маршруты

devise_scope :user do 
  get '/auth/:provider' => 'users/omniauth_callbacks#passthru'
end

devise_for :users, :path => "", :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" }

В качестве информации я также настроил свое приложение facebook test_app со следующим URL-адресом: http://example.com/

Я был бы рад узнать, если кто-то подумал/испытал это. Благодарю вас!


person benoitr    schedule 21.05.2011    source источник


Ответы (2)


попробуйте добавить:

Before do
  Capybara.default_host = 'example.com'
end

к вашему файлу support/env.rb, попробуйте также закомментировать:

OmniAuth.config.full_host = 'http://example.com' # issue 257

из вашего файла initializer/devise.rb.

person Luca G. Soave    schedule 07.06.2011

Возможно, я слишком мало здесь предполагаю, но на всякий случай... вы настроили контроллер аутентификации и связанную с ним маршрутизацию?

# /config/routes.rb
match "/auth/:provider/callback" => "authentications#create"

Редактировать: Извините, я только что понял, что вы сказали, что настроили все так, как указано в вики. Я думаю, вы сделали это так. Пожалуй, я все равно оставлю это здесь.

Чтобы узнать, как настроить контроллер аутентификации, посмотрите скринкасты по теме. Они действительно отличный ресурс.

У меня есть контроллер, написанный с полной аутентификацией Facebook, который я могу опубликовать, если хотите? Просто оставьте комментарий.

person David Tuite    schedule 22.05.2011
comment
Привет, Duckyfuzz, спасибо за ответ! Вы правы, я должен добавить свой маршрут. (также я меняю хост, как вы можете видеть здесь github.com/intridea/omniauth/issues/257, все равно выдал мне еще одну ошибку). Я видел скринкаст ryanb, но не следил за ним, так как думал, что код более удобен в вики devise, поскольку Devise теперь поддерживает интеграцию omniauth. (github.com/plataformatec/devise/wiki/OmniAuth:-Обзор ). Итак, теперь у меня есть URI::InvalidComponentError :( - person benoitr; 22.05.2011
comment
Я не уверен, если честно. Я никогда не устанавливал omniauth с помощью модуля devise, поэтому мне очень сложно сказать, как он должен выглядеть. Извините, я не могу больше помочь. - person David Tuite; 22.05.2011