Created
November 4, 2011 05:44
-
-
Save kinopyo/1338738 to your computer and use it in GitHub Desktop.
Integration test with Omniauth. This example is using twitter, and assume you've installed rspec and capybara. Official document is here: https://github.com/intridea/omniauth/wiki/Integration-Testing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# in spec/support/omniauth_macros.rb | |
module OmniauthMacros | |
def mock_auth_hash | |
# The mock_auth configuration allows you to set per-provider (or default) | |
# authentication hashes to return during integration testing. | |
OmniAuth.config.mock_auth[:twitter] = { | |
'provider' => 'twitter', | |
'uid' => '123545', | |
'user_info' => { | |
'name' => 'mockuser', | |
'image' => 'mock_user_thumbnail_url' | |
}, | |
'credentials' => { | |
'token' => 'mock_token', | |
'secret' => 'mock_secret' | |
} | |
} | |
end | |
end |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# in spec/requests/spec_helper.rb | |
RSpec.configure do |config| | |
# ... | |
# include our macro | |
config.include(OmniauthMacros) | |
end | |
OmniAuth.config.test_mode = true |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# in spec/requests/top_spec.rb | |
describe "access top page" do | |
it "can sign in user with Twitter account" do | |
visit '/' | |
page.should have_content("Sign in with Twitter") | |
mock_auth_hash | |
click_link "Sign in" | |
page.should have_content("mockuser") # user name | |
page.should have_css('img', :src => 'mock_user_thumbnail_url') # user image | |
page.should have_content("Sign out") | |
end | |
it "can handle authentication error" do | |
OmniAuth.config.mock_auth[:twitter] = :invalid_credentials | |
visit '/' | |
page.should have_content("Sign in with Twitter") | |
click_link "Sign in" | |
page.should have_content('Authentication failed.') | |
end | |
end |
Is spec/requests still the best place to put spec_helper.rb? It doesn't seem to get picked up.
mock_auth_hash
is undefined.
@indiesquidge awesome! thank you.
thanks for share :)
For google_oauth2
you need to use a info
key instead of user_info
. Here's the gems I'm using:
omniauth (1.3.1)
omniauth-google-oauth2 (0.3.1)
@dyatlov @kinopyo After deeper investigation I figured out that this code should actualy go to config/environments/test.rb
#in config/environments/test.rb
Rails.application.configure do
...
OmniAuth.config.test_mode = true
OmniAuth.config.mock_auth[:github] = OmniAuth::AuthHash.new({
'provider' => 'github',
'uid' => '123545',
'info' => {
'name' => 'mockuser',
'image' => 'mockuser_avatar_url'
}
})
...
end
I am trying with google and invalid credentials doesnt work. It successfully authenticates from google account. It works on facebook but not google. For google should i do something different? I appreciate any help! Thanks!
it "can handle authentication error" do
OmniAuth.config.mock_auth[:google] = :invalid_credentials
visit '/'
page.should have_content("Sign in with Twitter")
click_link "Sign in"
page.should have_content('Authentication failed.') #this fails
end
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@abitdodgy, try this:
Worked for me. Let me know if you have issues.