अनुरोध प्रमाणीकरण में प्रमाणीकरण को दबाते समय, आप सत्र और/या स्टब नियंत्रक विधियों को कैसे सेट करते हैं? मैं अपने एकीकरण परीक्षण में प्रमाणीकरण बाहर ठूंठ कोशिश कर रहा हूँ - rspec/अनुरोध spec
का अनुरोध करता है यहाँ एक परीक्षण का एक उदाहरण है
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
और ApplicationController कि प्रमाणीकरण संभालती है :
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)>'
धन्यवाद डेविड। यह बहुत अच्छा काम करता है, लेकिन ऐसा लगता है कि ये सभी अनुरोध करने के लिए थोड़ा अधिक है? –
अगर मैंने सोचा कि यह अधिक था, तो मैंने इसकी सिफारिश नहीं की होगी :) –
यह विश्वसनीय रूप से करने का सबसे आसान तरीका भी है। 'ActionDispatch :: IntegrationTest' को वास्तविक ब्राउज़र का उपयोग किए बिना ब्राउज़र के माध्यम से बातचीत करने वाले एक या अधिक उपयोगकर्ताओं को अनुकरण करने के लिए डिज़ाइन किया गया है। संभावित रूप से एक से अधिक उपयोगकर्ता हैं (यानी।सत्र) और एक उदाहरण के भीतर एक से अधिक नियंत्रक, और सत्र/नियंत्रक ऑब्जेक्ट्स अंतिम अनुरोध में उपयोग किए जाते हैं। अनुरोध से पहले आपके पास उनके पास पहुंच नहीं है। –