2011-08-25 12 views
7

मैं फेसबुक के माध्यम से अपना लॉगिन परीक्षण करना चाहता हूं। मैं शुद्ध omniauth का उपयोग कर, डब्ल्यू/ओ Devise। मैं विकि पृष्ठ की जाँच करें और निम्न करें:omniauth mock facebook प्रतिक्रिया

अनुरोध चश्मा के लिए सहायक

module IntegrationSpecHelper 
    def login_with_oauth(service = :facebook) 
    visit "/auth/#{service}" 
    end 
end 

spec_helper.rb

RSpec.configure do |config| 
     config.include IntegrationSpecHelper, :type => :request 
    end 

    Capybara.default_host = 'http://example.org' 
    OmniAuth.config.test_mode = true 
    OmniAuth.config.add_mock(:facebook, { 
    :provider => 'facebook', 
    :uid => '12345', 
    :user_info => { 
     :name => 'dpsk' 
     } 
}) 

मेरी कल्पना

require 'spec_helper' 

describe 'facebook' do 
    it "should login with facebook", :js => true do 
    login_with_oauth 

    visit '/' 
    page.should have_content("dpsk") 
    end 
end 


#OmniAuth routes 
    match "/auth/:provider/callback" => "sessions#create" 
    match "/signout" => "sessions#destroy", :as => :signout 
    match "/signin" => "sessions#signin", :as => :signin 
    match "/auth/failure" => "sessions#failure", :as => :auth_failure 

लेकिन कल्पना कुछ भी नहीं के बजाय रिटर्न मेरे नकली मुझे एक त्रुटि मिली:

Failure/Error: visit "/auth/facebook" 
    You have a nil object when you didn't expect it! 
You might have expected an instance of Array. 
The error occurred while evaluating nil.[] 

मेरी त्रुटि कहां है?

+0

अगर मैं अपने नकली और मेजबान के साथ हिस्सा बाहर टिप्पणी व्यवहार फ्लॉप परिवर्तन की तुलना में (केवल enable_test_mode = छोड़ दिया सही)। ऐसा लगता है जैसे omniauth बस मेरे नकली नहीं देखा: | –

+0

आपके सत्र नियंत्रक और उपयोगकर्ता मॉडल कैसा दिखता है? – azolotov

उत्तर

10

मेरी समस्या नकली में थी, इसकी गलत संरचना है।

OmniAuth.config.mock_auth[:facebook] = { 
    'user_info' => { 
    'name' => 'Mario Brothers', 
    'image' => '', 
    'email' => '[email protected]' }, 
    'uid' => '123545', 
    'provider' => 'facebook', 
    'credentials' => {'token' => 'token'} 
} 
+0

सही संरचना पोस्ट करने के लिए तैयार? – ardavis

+1

यकीन है, क्यों नहीं, मैंने अपना उत्तर –

+1

अपडेट किया है शायद यह ध्यान देने योग्य है कि यह ऑथहाश संरचना में होना चाहिए। बस 'OmniAuth :: AuthHash.new प्रारंभ करें ({आपके पास है}}' –

0

यह संरचना मेरे लिए काम किया (दिसंबर 2016)

OmniAuth.config.mock_auth[:facebook] = OmniAuth::AuthHash.new({ 
    'provider' => 'facebook', 
    'uid' => '123545', 
    'info' => { 
    'email' => '[email protected]', 
    'name' => 'Mario Brothers', 
    'image' => '' }, 
    'credentials'=> { 
    'token'=> '12345', 
    'expires_at' => 1486718672, 
    'expires' => true }, 
    'extra' => { 
    'raw_info' => { 
     'email' => '[email protected]', 
     'name' => 'Mario Brothers', 
     'id' => '12345' } 
    } 
}) 
संबंधित मुद्दे