आपका कोड मेरे जैसे एक बहुत लग रहा है - मैं 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 के साथ, मुझे उम्मीद है कि यह नहीं हो रहा है।
यहां डिवीज जिथब विकी का एक समाधान है जो मेरे लिए नियंत्रक परीक्षण में काम करता है [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)) –