2011-04-23 11 views
8

[ठीक है ... मेरा पहला सवाल है, तो कोमल हो।], लेकिन मैं विस्तार करने के लिए क्या होता है अपने ही नियंत्रक है जब उपयोगकर्ता बनाया जाता है। मैं पंजीकरण के समय दोनों "उपयोगकर्ता" और "एजेंसी" बना रहा हूं (साइन अप)।समस्या मेरी वसीयत नियंत्रक rspec में</p> <p>मैं अपने प्रमाणीकरण के लिए वसीयत उपयोग कर रहा हूँ "पोस्ट बनाने के"

मार्गों में ...

devise_for :users, :controllers => {:registrations => "registrations"} 

मेरे पूरा नियंत्रक ...

class RegistrationsController < Devise::RegistrationsController 
    def create 
    super # creates the @user 
    @agency = Agency.create! params[:agency] 
    @agency.users << @user 
    @agency.owner = @user 
    @user.agency = @agency 
    @agency.save 
    @user.account_admin = true 
    @user.save 
    end 
end 

मेरे समस्या मैं इस कोड की जांच करने के लिए एक rspec स्थापित करना चाहते हैं। कोड काम कर रहा है, लेकिन मैं अपने चश्मे में 100% कोड कवरेज के लिए शूटिंग कर रहा हूं। यहां मेरा पूरा spec है ...

require 'spec_helper' 
describe RegistrationsController do 
    render_views 
    describe "POST create" do 
    it "creates an associated user" do 
     @agency = Factory.create(:agency) 
     @user = Factory.create(:user, :agency => @agency) 
     User.stub(:new).with({'name' => 'pat'}) { @user } 
     Agency.stub(:new).with({'name' => 'pat'}) { @agency } 
     post :create, :user => {'name' => 'pat'} 
     assigns(:user).should be(@user) 
    end 
    end 
end 

लेकिन, मुझे "पोस्ट बनाने" पर कोई त्रुटि मिल रही है। यहाँ त्रुटि संदेश

Could not find devise mapping for path "/users?user[name]=pat" 

और यह (मुझे लगता है कि) है "रेक मार्गों"

user_registration POST /users(.:format) {:action=>"create",:controller=>"registrations"} 

किसी भी विचार से प्रासंगिक लाइन है?

पैट

+2

मैं लाइन request.env [ "devise.mapping"] जोड़ने = Devise.mappings कि (परीक्षण और त्रुटि द्वारा) की खोज की। लेकिन मैं वास्तव में समझ नहीं पा रहा हूं कि वह पंक्ति क्या करती है - इसलिए टिप्पणियों की सराहना की जाएगी। – Pat

उत्तर

11

विशेष रूप से, लिंक @shanethehat द्वारा संदर्भित, लाइन

@request.env["devise.mapping"] = Devise.mappings[:admin] 

से एक टुकड़ा बाहर को कॉपी समस्या सवाल में उत्पन्न हल करती है। अपने डेविस-स्वाद वाले नियंत्रक परीक्षण के लिए बस उस रेखा को before_filter में छोड़ दें। प्रश्न में संसाधन के लिए :admin बदलें (आमतौर पर :user)

काम करने का कारण: अकेले SessionsController का वर्णन विशिष्ट विशिष्ट संसाधन संसाधन की पहचान नहीं करता है। उदाहरण के लिए, यदि आपके ऐप में admin और user संसाधन हैं, तो हो सकता है कि आप 2 SessionsController (ओं) चश्मा के 2 सेट के साथ हो - प्रत्येक संसाधन प्रकार के लिए एक।

उस स्थिति में, प्रत्येक परीक्षण के लिए सही संसाधन पर काम करने के लिए, आपको अपने SessionsController (एस) का उदाहरण बताएं कि आप प्रत्येक उदाहरण के उदाहरण के लिए हैं। ऊपर की रेखा बस यही करता है। [: उपयोगकर्ता] कल्पना परीक्षण करने का कारण बनता है कि परीक्षण अब निष्पादित करने के लिए

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