2011-09-17 14 views
16

के साथ rspec नियंत्रक परीक्षण मुझे rspec परीक्षण नियंत्रक devise प्रमाणीकरण के साथ समस्या हो रही है।devise प्रमाणीकरण

मैं एक निम्न सेटअप

मैं अपने spec_helper.rb

में

config.include Devise::TestHelpers, :type => :controller 

को शामिल किया है मेरी merchants_controller_spec.rb में है

describe MerchantsController do 
    before :each do 
    @user = Factory(:user) 
    @merchant = Factory(:merchant, :user_id => @user.id,:is_approved => false, :is_blacklisted => false) 
    controller.stub!(:current_user).and_return(@user) 
    end 
    describe "GET index" do 
    it "assigns all merchants as @merchants" do 
     merchant = Factory(:merchant,:is_approved => true, :is_blacklisted => false) 
     get :index 
     assigns(:merchants).should eq([merchant]) 
    end 
    end 
end 

मेरे merchants_controller.rb

class MerchantsController < ApplicationController 

    before_filter :authenticate_user! 
    def index 
    @merchants = Merchant.approved 
    debugger 
    respond_to do |format| 
     format.html # index.html.erb 
     format.xml { render :xml => @merchants } 
    end 
    end 
end 

मैं एक गुंजाइश व्यापारी मॉडल में मंजूरी दे दी

scope :approved, where(:is_approved => true, :is_blacklisted => false) 

अब मेरी समस्या भले ही मैं current_user टोंटदार और लौट आए @user current_user के रूप में, मेरे merchants_controller सूचकांक कल्पना विफल हो रहा है है। लेकिन अगर मैं certicate_user टिप्पणी करता हूँ! तो spec पास,

प्रमाणीकरण_यूसर के बिना! इंडेक्स एक्शन का डीबगर पकड़ा गया है लेकिन प्रमाणीकरण_यूसर के साथ! डीबगर पकड़ा नहीं गया है।

मुझे लगता है कि current_user subbing में समस्या है और मैं इसे समझने में सक्षम नहीं हूं।

मुझे बाहर मदद ..

उत्तर

22

आप github पर डॉक्स के माध्यम से पढ़ी है?

वसीयत कार्यात्मक चश्मा के लिए कुछ परीक्षण सहायकों भी शामिल है। उनका उपयोग करने के लिए, आपको बस अपनी परीक्षा कक्षा में Devise::TestHelpers शामिल करने की आवश्यकता है और sign_in और sign_out विधियों का उपयोग करें। इस तरह के तरीके नियंत्रकों में के रूप में ही हस्ताक्षर है:

sign_in :user, @user # sign_in(scope, resource) 
sign_in @user   # sign_in(resource) 

sign_out :user   # sign_out(scope) 
sign_out @user   # sign_out(resource) 
+1

! (: Current_user) .and_return (@user) sign_in @user लेकिन अभी भी साथ मेरी समस्या का समाधान नहीं करता है। मुझे लगता है कि उपयोगकर्ता अभी भी प्रमाणित नहीं है क्योंकि इंडेक्स एक्शन के अंदर डीबगर अभी भी पकड़ा नहीं गया है। कोई विचार? – Gagan

+0

मेरी इच्छा है कि मैं इसे दो बार बढ़ा सकता हूं। मेरे व्यवस्थापक को बनाने के लिए मेरे पास एक नेस्टेड फैक्ट्री थी, और मुझे पता नहीं लगा कि उपयोगकर्ता क्यों बनाया जा रहा था लेकिन लॉग इन नहीं किया गया। – Arel

2

एक अन्य विकल्प

RSpec.describe YourController, :type => :controller do 
    before do 
    user = FactoryGirl.create(:user) 
    allow(controller).to receive(:authenticate_user!).and_return(true) 
    allow(controller).to receive(:current_user).and_return(user) 
    end 

    # rest of the code 
end 
मैं controller.stub प्रतिस्थापित
+0

यह मेरे सभी परीक्षणों के लिए मेरे लिए काम करता है। Https://github.com/plataformatec/devise/wiki/How-To:-Stub- प्रमाणीकरण-in-controller-specs और https://github.com/plataformatec/devise/wiki/How-To:- पर गाइड टेस्ट-कंट्रोलर-रेल-3-और -4-% 28and-RSpec% 29 एक उदाहरण के लिए काम करता है, लेकिन पूरा सूट नहीं। – Foton

संबंधित मुद्दे