2010-11-27 11 views
16

मैं वर्तमान में आरएसपीईसी के साथ एक कस्टम डिवाइस सत्र नियंत्रक का परीक्षण करने की कोशिश कर रहा हूं। मेरे नियंत्रक इस तरह दिखता है:कस्टम डिवाइस सत्र नियंत्रक का आरएसपीसी परीक्षण सार नियंत्रक के साथ विफल रहता है :: एक्शन नॉटफाउंड

class SessionsController < Devise::SessionsController 

    def create 
    #valid email? 
    if !(params[:email] =~ /^[A-Za-z0-9._%+-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,}$/) 
     set_flash_message :notice, "Please enter a valid e-mail address!" 
    end 

    super 
    end 
end 

मेरे RSpec नियंत्रक टेस्ट यह है:

require 'spec_helper' 
require 'devise/test_helpers' 

describe SessionsController do 

    it "should put a warning on invalid mail address login attempt" do 
    post :create, :user => {:email => 'invalidEmailAddress'} 
    response.should contain "Please enter a valid e-mail address!" 
    end 

    it "should put no warning on valid mail address login attempt" do 
    pending 
    end 
end 

अगर मैं RSpec टेस्ट पर अमल यह निम्न पंक्ति के साथ विफल:

Failure/Error: post :new, :user => {:email => 'invalidEmailAddress'} 
    AbstractController::ActionNotFound 
    # ./spec/controllers/sessions_controller_spec.rb:7 

से टिप्स plataformatec डेविस विकी के साथ-साथ this post इस समस्या को हल नहीं किया। आपकी सहायता के लिए धन्यवाद.

अलावा

मैं आगे की जांच की। मैं वास्तव में नियंत्रक कल्पना के लिए निम्न अलावा के साथ त्रुटि "निकालें" करने में सक्षम था:

before(:each) do 
    request.env['devise.mapping'] = Devise.mappings[:user] 
end 

लेकिन अब एक नया त्रुटि दिखाई देती है:

Failure/Error: post :create #currently fails with multiple render warning 
Render and/or redirect were called multiple times in this action. Please note that you may only call render OR redirect, and at most once per action. Also note that neither redirect nor render terminate execution of the action, so if you want to exit an action after redirecting, you need to do something like "redirect_to(...) and return". 

यहां तक ​​कि के साथ बनाने के विधि इनहेरीट में बाहर छोड़ दिया नियंत्रक त्रुटि प्रकट होता है। त्रुटि प्राप्त करने पर प्रकट नहीं होती है: उदाहरण के लिए नया। ऐसा लगता है कि पोस्ट: केवल बनाएं। मैं विचारों से बाहर हूं? कोई मदद? धन्यवाद!

उत्तर

18

मैंने आखिरकार मेरे परीक्षण में विधि setup_controller_for_warden को कॉल करके और request.env ["devise.mapping"] = devise.mappings [: user] कर रहा है, जिसमें डिवीज़ टेस्ट हेल्पर्स सहित, मेरी समस्या को ठीक कर दिया। इस तरह:

require 'test_helper' 

class SessionsControllerTest < ActionController::TestCase 
    include Devise::TestHelpers 

    test "should reject invalid captcha" do 
     setup_controller_for_warden 
     request.env["devise.mapping"] = Devise.mappings[:user] 

     get :new 

     assert_response :success 
    end 
end 

हालांकि आपकी डबल रेंडर समस्या के बारे में निश्चित नहीं है, क्या आप वाकई पोस्ट करना चाहते हैं: फिर प्रस्तुत करें? मुझे यकीन नहीं है कि कैसे rspec काम करना चाहिए।

+0

'रेंडर' दृश्य चश्मे के लिए है - यह नियंत्रक चश्मा में समझ में नहीं आता है, जो डिफ़ॉल्ट रूप से विचार प्रस्तुत नहीं करता है। यदि आप परीक्षण नियंत्रक को प्रतिपादन करना चाहते हैं तो एक 'render_views' निर्देश है (जो पुराने "integrate_views" को प्रतिस्थापित करता है)। – zetetic

+0

ठीक है, आप सही हैं। लेकिन स्पष्ट प्रस्तुत किए बिना भी त्रुटि उत्पन्न होती है। मेरे पुराने कोड में रेंडर कभी नहीं पहुंचा था। – kaihowl

+0

आपके उत्तर के लिए धन्यवाद। मैंने आपके सुझावों की कोशिश की, लेकिन उनमें से कोई भी मेरे लिए काम नहीं किया। अफसोस की बात है, वही त्रुटियां खत्म होती हैं। – kaihowl

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