2016-08-30 18 views
1

私はレールアプリで認証にAuth0を使用しています。私はログインとサインアップのためのいくつかの機能テストを書く必要があります。私はrspecとcapybaraでこれを行う方法について何か具体的なものを見つけることができません。Test Auth0 RSpec with Railsで

このgistで説明されている行に沿って試してみましたが、それでも動作しません。誰かがAuth0でrspec機能テストを経験していれば、あなたが正しい方向に私を導くことができたらうれしいです。

ありがとうございます!

マイ設定

# 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[:auth0] = { 
     'provider' => 'auth0', 
     'uid' => '123545', 
     'user_info' => { 
     'name' => 'mockuser', 
     'image' => 'mock_user_thumbnail_url' 
     }, 
     'credentials' => { 
     'token' => 'mock_token', 
     'secret' => 'mock_secret' 
     } 
    } 
    end 
end 

# in spec/requests/spec_helper.rb 
RSpec.configure do |config| 
    # ... 
    # include our macro 
    config.include(OmniauthMacros) 
end 

OmniAuth.config.test_mode = true 

はその後、私の仕様で、私は

scenario 'Should successfully login user' do 
     visit login_path 

     mock_auth_hash 
     click_link "Sign in" 

     expect(page).to have_content('Signed in successfully') 
     expect(page).to have_link("Logout", href: logout_path) 
    end 
+0

gistと同じ手順を使用しますが、 'OmniAuth.config.mock_auth [:auth0]'を使用してください。書かれているように、この質問はいくつかの理由で話題になっています。あなたはチュートリアルやサイト外の参照を求めていますが、この質問は非常にオープンに終わっており、信頼できる方法で答えることはできません。 – max

答えて

0

を持っているこれは私が

# in spec/support/omniauth_macros.rb 
module OmniauthMacros 
    def mock_valid_auth_hash(user) 
    # The mock_auth configuration allows you to set per-provider (or default) 
    # authentication hashes to return during integration testing. 
    opts = { 
     "provider": user.provider, 
     "uid": user.uid, 
     "info": { 
      "email": user.email, 
      "first_name": user.first_name, 
      "last_name": user.last_name, 
     }, 
     "credentials": { 
      "token": "XKLjnkKJj7hkHKJkk", 
      "expires": true, 
      "id_token": "eyJ0eXAiOiJK1VveHkwaTFBNXdTek41dXAiL.Wz8bwniRJLQ4Fqx_omnGDCX1vrhHjzw", 
      "token_type": "Bearer" 
     } 
    } 
    OmniAuth.config.mock_auth[:auth0] = OmniAuth::AuthHash.new(opts) 
    end 

    def mock_invalid_auth_hash 
    OmniAuth.config.mock_auth[:auth0] = :invalid_credentials 
    end 
end 

# in spec/support/features/session_helpers.rb 
module Features 
    module SessionHelpers 

    def log_in(user, invalid=false, strategy = :auth0) 
     invalid ? mock_invalid_auth_hash : mock_valid_auth_hash(user) 
     Rails.application.env_config["omniauth.auth"] = OmniAuth.config.mock_auth[strategy.to_sym] 
     visit "/auth/#{strategy.to_s}/callback?code=vihipkGaumc5IVgs" 
    end 
    end 
end 

# in spec/support/rails_helper.rb 
RSpec.configure do |config| 
    # ... 
    # include our macro 
    config.include(OmniauthMacros) 

    # include Session helpers 
    config.include Features::SessionHelpers, type: :feature 
end 

それを解決し、最後にログインをシミュレートするために私の機能テストは

どのように見えるかです
# user signin feature test 

require 'rails_helper' 

feature 'Login with Omniauth' do 
    given(:user) { create(:user) } 

    context "With valid credentials" do 
    scenario 'Should successfully login user' do 
     log_in(user) 

     expect(page).to have_content("successfully signed in") 
     expect(page).to have_link("Logout", href: logout_path) 
    end 
    end 

    context "With invalid credentials" do 
    scenario "Should not log in user" do 
     log_in(user, true) 
     expect(page).to have_content('invalid_credentials') 
    end 
    end 
end 

希望すると便利です。