2011-10-15 2 views
9

के साथ एकीकरण परीक्षण मैं omniauth facebook साइन इन एकीकरण का उपयोग करने के लिए कॉन्फ़िगर किया गया है। जब मेरे spec/request परीक्षण से sign_in विधि बुला रहा मिलती है:rspec और devise sign_in env

undefined method `env' for nil:NilClass 

कल्पना:

describe FacebookController do 
    include Devise::TestHelpers 

    it "should display facebook logged in status" do 
    @user = User.create(:id => "123", :token => "token") 
    sign_in @user 
    visit facebook_path 
    end 
end 
+0

यहां डिवीज जिथब विकी का एक समाधान है जो मेरे लिए नियंत्रक परीक्षण में काम करता है [https://github.com/plataformatec/devise/wiki/How-To:-Test-controllers-with-Rails-3-and-4 - (और RSpec)] (https://github.com/plataformatec/devise/wiki/How-To:-Test-controllers-with-Rails-3-and-4- (और RSpec)) –

उत्तर

7

आपका कोड मेरे जैसे एक बहुत लग रहा है - मैं Capybara और वसीयत TestHelper कार्यों का उपयोग करने की कोशिश कर रहा था, और यह पता चला है कि आप प्रति https://github.com/plataformatec/devise/wiki/How-To:-Test-with-Capybara नहीं कर सकते हैं। ऐसा करने के लिए अनुशंसित तरीका उस पृष्ठ पर समझाया गया है, और यह मेरे लिए काम करता है।

स्पष्ट है कि, यहाँ मैं क्या किया है - spec_helper.rb में:

RSpec.configure do |config| 
    config.include Warden::Test::Helpers 
end 
Warden.test_mode! 

और मेरे कोड में, बस - logout :user

कारण है कि हम सिर्फ वसीयत के sign_in और sign_out तरीकों में बनाया गया है, यह है क्योंकि इन की आवश्यकता है सीधी पहुँच का उपयोग नहीं कर सकते हैं यदि आप सोच रहे हैं:

यहाँ क्यों, वसीयत विकि के अनुसार, आप sign_out उपयोग नहीं कर सकते है अनुरोध वस्तु के लिए जो Capybara का उपयोग करते समय उपलब्ध नहीं है। दोनों विधियों की कार्यक्षमता को एक साथ बंडल करने के लिए आप एक सहायक विधि बना सकते हैं।

कौन सा, मोटे तौर पर, इसका मतलब है कि के साथ, कहते हैं, MiniTest जबकि, एक वस्तु अनुरोध (@request) का प्रतिनिधित्व परीक्षण का मामला वर्ग के लिए एक उदाहरण चर, कि Capybara साथ ऐसा नहीं होता है के रूप में जोड़ा गया है। मैंने विवरण को और अधिक सटीक रूप से जानने के लिए कोड को नहीं देखा है, लेकिन मूल रूप से, वार्डन को इस ऑब्जेक्ट को कुकी स्टोर तक पहुंचने की उम्मीद है, जहां क्रेडेंशियल में साइन इन हैं। Capybara/RSpec के साथ, मुझे उम्मीद है कि यह नहीं हो रहा है।