Ich verwende Rails 5 mit minitest. Ich möchte das Einloggen in meinen Session-Controller simulieren, der auf omniauth angewiesen ist (ich benutze Google und FB für die Anmeldung). Ich habe dies in meinem Controller-Test test / controller / rates_controller_test.rb,
class RatesControllerTest < ActionDispatch::IntegrationTest
# Login the user
def setup
logged_in_user = users(:one)
login_with_user(logged_in_user)
end
und dann versuche ich mein Login in meinem Testhelfer test / test_helper.rb einzurichten
class ActiveSupport::TestCase
# Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
fixtures :all
def setup_omniauth_mock(user)
OmniAuth.config.test_mode = true
omniauth_hash = { "provider" => "google",
"uid" => "12345",
"info" => {
"name" => "#{user.first_name} #{user.last_name}",
"email" => user.email,
},
"extra" => {"raw_info" =>
{ "location" => "San Francisco",
"gravatar_id" => "123456789"
}
}
}
OmniAuth.config.add_mock(:google, omniauth_hash)
end
# Add more helper methods to be used by all tests here...
def login_with_user(user)
setup_omniauth_mock(user)
post sessions_path
end
Wenn ich meinen Controller-Test durchführe, erhalte ich jedoch einen Nullwert, wenn diese Zeile in meinem Session-Controller ausgewertet wird ...
user = User.from_omniauth(env["omniauth.auth"])
Oben wird "env [" omniauth.auth "]" zu Null ausgewertet.
Antworten:
0 für die Antwort № 1Das OmniAuth-Dokumente Zustand
Wenn Sie versuchen, OmniAuth zu testen, müssen Sie zwei Umgebungsvariablen festlegen
und bieten Beispiele mit RSpec
before do
Rails.application.env_config["devise.mapping"] = Devise.mappings[:user] # If using Devise
Rails.application.env_config["omniauth.auth"] = OmniAuth.config.mock_auth[:twitter]
end
In Ihrem Fall scheint es, als müssten Sie einstellen
Rails.application.env_config["omniauth.auth"] = OmniAuth.config.mock_auth[:google]
in deinem setup_omniauth_mock
Methode nach dem Aufruf an OmniAuth.config.add_mock
.