दिलचस्प पोस्ट
दिए गए अक्षांश / एलएनजी स्थान के लिए बाउंडिंग बॉक्स की गणना कैसे करें? जीएनयू एसएड में मेरे लेटरहाइड रेगेक्स में क्या गलत है? XAML से कमांड पैरामीटर के रूप में एक enum मान पास करना क्या मैं बूस्ट के साथ निर्देशिका में फ़ाइलों को पुनरावृति करने के लिए एक मुखौटा का उपयोग कर सकता हूं? यूआरएल से मिलान करने के लिए एक अच्छी नियमित अभिव्यक्ति क्या है? जियोलोकेशन मेरी स्थिति से निकटतम स्थान (lat, लम्बे) मैं अपने स्प्रिंग बूट वेबएप के लिए यूआरएल कैसे चुनूं? WAMPServer शुरू नहीं होगा क्योंकि api-ms-win-crt-runtime-l1-1-0.dll अनुपलब्ध है Sys.stdin के लिए छोटा बफर आकार सेट करना? उपज / जनरेटर के साथ कोड प्रवाह को समझना सी # में चर गुंजाइश एम्परसेंड के साथ PHP फ़ंक्शन शुरू करने का क्या अर्थ है? JQuery के प्रयोग से वर्णानुक्रमिक रूप से क्रमबद्ध विकल्पों के विकल्प एमएसआई और एक्सई को मिलाएं लैम्ब्डा के कॉल हस्ताक्षर या "मेक-फ़ंक्शन" के लिए कॉल करने योग्य मनमाना

अनुरोध स्पेक में स्टबिंग प्रमाणीकरण

एक अनुरोध का विवरण लिखते समय, आप सत्रों और / या स्टब नियंत्रक विधियों को कैसे सेट करते हैं? मैं अपने एकीकरण परीक्षणों में सत्यापन प्रमाणन करने की कोशिश कर रहा हूं – आरएसपीसी / अनुरोध

यहां एक परीक्षण का एक उदाहरण है

require File.dirname(__FILE__) + '/../spec_helper' require File.dirname(__FILE__) + '/authentication_helpers' describe "Messages" do include AuthenticationHelpers describe "GET admin/messages" do before(:each) do @current_user = Factory :super_admin login(@current_user) end it "displays received messages" do sender = Factory :jonas direct_message = Message.new(:sender_id => sender.id, :subject => "Message system.", :content => "content", :receiver_ids => [@current_user.id]) direct_message.save get admin_messages_path response.body.should include(direct_message.subject) end end end 

सहायक:

 module AuthenticationHelpers def login(user) session[:user_id] = user.id # session is nil #controller.stub!(:current_user).and_return(user) # controller is nil end end 

और अनुप्रयोगकंट्रोलर जो प्रमाणीकरण संभालता है:

 class ApplicationController < ActionController::Base protect_from_forgery helper_method :current_user helper_method :logged_in? protected def current_user @current_user ||= User.find(session[:user_id]) if session[:user_id] end def logged_in? !current_user.nil? end end 

इन संसाधनों का उपयोग करना क्यों संभव नहीं है?

 1) Messages GET admin/messages displays received messages Failure/Error: login(@current_user) NoMethodError: undefined method `session' for nil:NilClass # ./spec/requests/authentication_helpers.rb:3:in `login' # ./spec/requests/message_spec.rb:15:in `block (3 levels) in <top (required)>' 

Solutions Collecting From Web of "अनुरोध स्पेक में स्टबिंग प्रमाणीकरण"

एक अनुरोध युक्ति ActionDispatch::IntegrationTest आसपास एक पतली आवरण है, जो कंट्रोलर ऐनक जैसे काम नहीं करता (जो कि ActionController::TestCase )। यद्यपि एक सत्र पद्धति उपलब्ध है, मुझे नहीं लगता कि यह समर्थित है (यानी यह शायद वहां मौजूद है क्योंकि एक मॉड्यूल जिसे अन्य उपयोगिताओं के लिए शामिल किया गया है, वह भी उस विधि को शामिल करता है)।

मैं प्रयोक्ताओं को प्रमाणित करने के लिए जो कार्रवाई करता हूं उसे पोस्ट करके लॉगिंग की अनुशंसा करता हूं। यदि आप सभी यूजर कारखानों के लिए पासवर्ड 'पासवर्ड' (उदाहरण के लिए) करते हैं, तो आप ऐसा कुछ कर सकते हैं:

 डीईफ़ लॉगिन (उपयोगकर्ता)
   पोस्ट login_path,: लॉगिन => user.login,: पासवर्ड => 'पासवर्ड'
 समाप्त

बीटीडब्लू, @ डेविड चेमिस्की के जवाब में थोड़ा तवेकने की आवश्यकता हो सकती है अगर आप डिविज़ का उपयोग कर रहे हैं मैं अपने एकीकरण / अनुरोधों का परीक्षण कर रहा हूं ( इस स्टैक ओवरफ्लो पोस्ट के लिए धन्यवाद):

 # file: spec/requests_helper.rb def login(user) post_via_redirect user_session_path, 'user[email]' => user.email, 'user[password]' => user.password end 

एफडब्ल्यूआईड्यू, मेरी टेस्ट :: पोर्ट टेस्टिंग में यूनिट टेस्ट करने के लिए, मैं कई अनुरोधों के साथ लॉग इन करने में सक्षम होना चाहता था। यह कुछ खुदाई ले ली है, लेकिन यह मेरे लिए काम करने के लिए मिला है रेल 3.2.13 और आरएसपीसी 2.13.0 का उपयोग करना

 # file: spec/support/devise.rb module RequestHelpers def login(user) ActionController::IntegrationTest.new(self).open_session do |sess| u = users(user) sess.post '/users/sign_in', { user: { email: u.email, password: 'password' } } sess.flash[:alert].should be_nil sess.flash[:notice].should == 'Signed in successfully.' sess.response.code.should == '302' end end end include RequestHelpers 

तथा…

 # spec/request/user_flows.rb require 'spec_helper' describe 'User flows' do fixtures :users it 'lets a user do stuff to another user' do karl = login :karl karl.get '/users' karl.response.code.should eq '200' karl.xhr :put, "/users/#{users(:bob).id}", id: users(:bob).id, "#{users(:bob).id}-is-funny" => 'true' karl.response.code.should eq '200' User.find(users(:bob).id).should be_funny bob = login :bob expect { bob.get '/users' }.to_not raise_exception bob.response.code.should eq '200' end end 

संपादित करें : निश्चित टाइपो

आप सत्र के रूप में अच्छी तरह से आसानी से स्टब कर सकते हैं।

 controller.session.stub(:[]).with(:user_id).and_return(<whatever user ID>) 

सभी रूबी विशेष ऑपरेटरों वास्तव में तरीकों हैं कॉलिंग 1+1 के समान है 1.+(1) , जिसका अर्थ है + केवल एक तरीका है इसी तरह, session[:user_id] session पर कॉलिंग विधि [] के समान है, session के रूप में session.[](:user_id)

मुझे यह भरोसेमंद के लिए बहुत उपयोगी पाया: https://github.com/plataformatec/devise/wiki/How-To:- टेस्ट-नियंत्रक- साथ -रेल्स 3- और 4- (और -आरएसपीईसी )