2013-09-04 4 views
16

अधिकांश नियंत्रकों के लिए before_filter :authenticate_user! में रेल अनुप्रयोग का परीक्षण करना, मुझे सत्र को संरक्षित करने के लिए कैपिबरा नहीं मिल सकता है।एक घटना के बाद कैपिबारा मेरे सत्र को क्यों छोड़ रहा है?

मेरे पास कैपिबरा है जो पॉटरगेजिस्ट के साथ फैंटॉमजेएस का उपयोग करके कॉन्फ़िगर किया गया है।

require 'spec_helper' 
include Warden::Test::Helpers 

module FeatureHelpers 
    def login(user = FactoryGirl.create(:default_user)) 
    login_as user, scope: :user 
    user 
    end 
end 

मैं निम्नलिखित कल्पना फ़ाइल है:

require 'spec_helper' 
include Warden::Test::Helpers 

feature 'Leads Data Tasks View' do 
    before(:each) do 
    @user = login 
    end 

    after{ Warden.test_reset! } 

    context "clicking a task button" do 
    scenario "login persists across multuple actions", js: true do 
     visit '/tasks' 

     page.should have_selector('#parse', count: 1) 
    end 
    end 
end 

जब मैं परीक्षण चलाने के रूप में यह यहाँ दिखाया गया है, यह पारित करेंगे

मैं निम्नलिखित सहायक का उपयोग करें। हालांकि, अगर मैं AJAX क्रियाओं को निष्पादित करने वाले किसी चीज़ पर click_link का आह्वान करता हूं, या यदि मैं बस visit '/tasks' दो बार करने का प्रयास करता हूं, तो should दावा विफल हो जाएगा क्योंकि मुझे ऐप के लॉगिन पृष्ठ पर रीडायरेक्ट किया जाएगा।

मैंने Capybara::Session स्थापित करने सहित कुछ अलग दृष्टिकोणों की कोशिश की है, लेकिन मुझे अभी भी AJAX अनुरोधों पर 401 कोड मिलते हैं और मैं केवल प्रति spec में सफलतापूर्वक एक बार देख सकता हूं।

मैं क्या गलत कर रहा हूं?

+0

से लिंक करेगा , मुझे लगता है कि यह तैयार है। क्या आप कई AJAX कॉल फायर कर रहे हैं? AJAX कॉल से निपटने के दौरान देवता का कुछ अजीब व्यवहार होता है। अधिक जानकारी के लिए http://stackoverflow.com/questions/11845500/rails-devise- प्रमाणीकरण-csrf-issue देखें – DickieBoy

+0

मुझे उस प्रश्न पर इंगित करने के लिए धन्यवाद। अपने प्रश्न का उत्तर देने के लिए, मैं अक्सर कई AJAX कॉलों को फायर कर रहा हूं, हालांकि यह समस्या तब भी हो रही है जब मैं किसी को भी आग नहीं डालता। यदि मैं 'विज़िट' कॉल को डुप्लिकेट करता हूं ताकि यह पृष्ठ को दो बार लोड कर सके, तो AJAX के बीच कोई भी नहीं होता है। – asfallows

+0

इसके अतिरिक्त, परीक्षण के लिए मैंने आपके लिंक किए गए प्रश्न में स्वीकृत उत्तर से विकल्प 2 और दोनों अस्थायी रूप से मेरे एप्लिकेशन नियंत्रक में 'protect_from_forgery' पर टिप्पणी करने का प्रयास करने का निर्णय लिया। इनमें से कोई भी परिणाम बदल नहीं गया; मुझे अभी भी पहले अनुरोध पर 401 मिलते हैं। – asfallows

उत्तर

22

तो समस्या यह थी कि phantomjs ड्राइवर (poltergeist) एक अलग डेटाबेस कनेक्शन का उपयोग कर रहा था। मैंने पहले ठीक उसी मुद्दा था और मैं spec/support/shared_db_connection.rb

में कोड के साथ railscast episode 391 से एक समाधान मिल गया जब से मैं अपने कोड के लिए लाइसेंस नहीं मिल सकता है तो मैं बस वाक्य रचना अपने का उपयोग कर के आधार पर code here

+3

मुझे संदेह है कि आप डेटाबेस क्लीयरर मणि का उपयोग करते हैं, और आपको इसका उपयोग करने के लिए कहना चाहिए: कैपिबरा परीक्षणों के लिए स्पष्ट रूप से छंटनी रणनीति। इसके अलावा 'self.use_transactional_fixtures = false'। इस तरह आपको कनेक्शन साझा करने की आवश्यकता नहीं है। – Fedcomp

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