में नहीं लॉग इन के लिए पुनर्निर्देश यह करती हैं, जिसे नहीं प्रवेश के उपयोगकर्ता (उर्फ एक अतिथि) की कोशिश करता प्रवेश पृष्ठ पर रीडायरेक्ट का एक before_filter
साथ एक बहुत ही विशिष्ट नियंत्रक के लिए एक कल्पना है /projects/new
तक पहुंचने के लिए।"ध्यान में न आया फेंक: वार्डन" जब परीक्षण उपयोगकर्ताओं
describe ProjectsController do
(...)
describe "GET new" do
context 'when not logged in' do
before { sign_in_nobody }
context 'creating project' do
before { get :new }
it 'denies access' do
expect(response).to be_redirect
end
end
end
end
end
मैं मेहमानों, उपयोगकर्ताओं, व्यवस्थापक और superadmins के लिए :index
, :show
और :new
तक पहुँचने का सभी संभावित परिणामों specced है। मुझे लॉग इन या अतिथि उपयोगकर्ता, व्यवस्थापक या नहीं का उपयोग करने में कोई समस्या नहीं थी - लेकिन वास्तव में यह पहली बार है जब इस स्पेक ने एक क्रिया को छुआ जिसमें डेविस के before_filter :autheticate_user!
शामिल हैं और यह उस पर बुरी तरह विफल रहता है।
Failures:
1) ProjectsController GET new when not logged in creating project denies access
Failure/Error: get :new
ArgumentError:
uncaught throw :warden
# ./spec/controllers/projects_controller_spec.rb:344:in `block (5 levels) in <top (required)>'
मैं प्रश्न का उत्तर के लिए खोज की है: "कैसे ठीक अप्रमाणित के लिए परीक्षण करने के लिए -
आप पहले से ही संदेह हो सकता है कल्पना भी expect(response).to be_redirect
तक पहुंच नहीं है, यह पहले एक hissy फिट फेंकता (अतिथि) rspec और devise के साथ उपयोगकर्ता ", लेकिन हर कोई केवल उपयोग करने के लिए आरएसपीईसी के लिए तैयार करने में उपयोगकर्ताओं को लॉग इन करने में समस्या के बारे में बात करता है। एक समस्या जो मुझे thusly हल:
#spec/support/devise_authenticators.rb
include Devise::TestHelpers
def sign_in_nobody
@request.env["devise.mapping"] = Devise.mappings[:user]
sign_in User.new
end
def sign_in_user
@request.env["devise.mapping"] = Devise.mappings[:user]
sign_in FactoryGirl.create(:user)
end
हालांकि यह नहीं है कि में प्रवेश यहाँ विफल रहता है, यह "लॉगिन नहीं किया जा रहा है।" अब तक मुझे बिल्कुल कुछ नहीं मिला है और मुझे लगता है कि किसी भी तरह से उन परिदृश्यों का परीक्षण करने के लिए है।
अभी मैं एक walkaround उपयोग कर रहा हूँ:
before { sign_in_nobody }
context 'creating project' do
it 'denies access' do
expect{ get :new }.to raise_exception("uncaught throw :warden")
end
end
लेकिन फिर भी यह व्यावहारिक रूप से सही है यद्यपि (uncaught throw :warden
होता है केवल जब authenticate_user!
में विफल रहता है तो यह एक उम्मीद के रूप में इस्तेमाल किया जा सकता) सिद्धांत रूप में यह वास्तव में गंदा लगता है।
कोई विचार यह कैसे ठीक से करना है?
(... शायद मैं इस सब पर परीक्षण नहीं किया जाना चाहिए, के रूप में कैसे before_filter authenticate_user!
की सत्यता की वसीयत के नहीं जिम्मेदारी मेरी है देख रहे हैं?)
यह [SO11152671] का डुप्लिकेट है (http://stackoverflow.com/questions/11152671/devise-warden-error-thrown -किसी: प्रमाणीकृत उपयोगकर्ता-इन-कार्यात्मक-रेल-परीक्षण # जवाब-20,725,510)। मैंने वहां एक पूर्ण जवाब चिपकाया है। संक्षेप में, आपको डेविज़ टेस्ट हेल्पर और वार्डन टेस्ट हेल्पर के लिए वास्तविक कंट्रोलरटेस्ट क्लास दोनों में शामिल करना होगा, test_helper.rb में नहीं। – xeorem