2012-05-26 32 views
6

मैं माइकल के आरओआर ट्यूटोरियल का पालन कर रहा हूं और उपयोगकर्ता प्रमाणीकरण प्रणाली बना रहा हूं। एक व्यवस्थापक निजीकरण है, जो उपयोगकर्ताओं को अन्य उपयोगकर्ताओं को हटाने की अनुमति देता है। एक निजीकृत व्यवस्थापक उपयोगकर्ता के रूप में लॉग इन करते समय उपयोगकर्ता सूची पृष्ठ पर विशेष 'हटाएं' लिंक दिखाई देते हैं। मेरा ऐप ठीक काम करता है लेकिन आरएसपीईसी परीक्षण मेरे लिए अज्ञात कारण के लिए विफल रहे हैं।प्रशासनिक 'हटाएं' लिंक के लिए रुपेक परीक्षण विफल हो जाते हैं। माइकल हार्टल का आरओआर 3.2 ट्यूटोरियल - अध्याय 9.4.2

मैंने परीक्षणों को दूसरी फ़ाइल spec/requests/sat_spec.rb पर अलग कर दिया है और मैं इसे डीबग करने के लिए प्रिये मणि का उपयोग करने की कोशिश कर रहा हूं, लेकिन अब तक कोई सफलता नहीं है।

describe "delete links" do 
    describe "as admin user" do 
    let(:admin) { FactoryGirl.create(:admin) } 
    before do 
     sign_in admin 
     visit users_path 
     binding.pry   
    end 
    it { should have_link('delete', href: user_path(User.first)) } 

    it "should be able to delete another user" do 
    expect { click_link('delete') }.to change(User, :count).by(-1) 
    end  
end 

टेस्ट विफलताएं:

1) separated admin tests delete links as admin user 
Failure/Error: it { should have_link('delete', href: user_path(User.first)) } 
    expected link "delete" to return something 
# ./spec/requests/sat_spec.rb:25:in `block (4 levels) in <top (required)>' 

2) separated admin tests delete links as admin user should be able to delete another user 
Failure/Error: expect { click_link('delete') }.to change(User, :count).by(-1) 
Capybara::ElementNotFound: 
    no link with title, id or text 'delete' found 
# (eval):2:in `click_link' 
# ./spec/requests/sat_spec.rb:28:in `block (5 levels) in <top (required)>' 
# ./spec/requests/sat_spec.rb:28:in `block (4 levels) in <top (required)>' 

क्या समस्या यहाँ या अधिक महत्वपूर्ण बात से है कि यह कैसे डिबग करने के लिए कर सकते हैं?

तुम मेरे कोड यहाँ https://github.com/tomek-rusilko/miniatury_katalog_2

उत्तर

9

आप अपने /users पृष्ठ की अपेक्षा रखने वाले उपयोगकर्ताओं की सूची रखने के लिए अपने पृष्ठ की अपेक्षा करते हैं। लेकिन आपने अपने टेस्ट डीबी को सरल उपयोगकर्ताओं के साथ भर नहीं दिया। इसमें सिर्फ एक उपयोगकर्ता, व्यवस्थापक शामिल है। लेकिन आपके users/_user.html.erb के अनुसार इस प्रकार के उपयोगकर्ताओं के पास 'डिलीट' लिंक नहीं है। तो, कम से कम एक उपयोगकर्ता निर्माण कथन जोड़ें और पुनः प्रयास करें।

+0

जीज़ इतना स्पष्ट! मुझे बेवकूफ लगता है: डी बहुत बहुत धन्यवाद। समस्या हल करने से पहले 'FactoryGirl.create (: उपयोगकर्ता)' को सरल बनाना। पॉप-अप की एक और चीज है: क्यों 'फैक्टरीगर्ल.क्रेट (: उपयोगकर्ता)' काम करता है लेकिन 'चलो (: उपयोगकर्ता) {फैक्टरीगर्ल.क्रेट (: उपयोगकर्ता)}' नहीं? – tomruss

+1

'let' का मूल्यांकन आलसी रूप से किया जाता है: जब तक आप' उपयोगकर्ता' 'चर का उपयोग नहीं करते हैं तब तक इसका ब्लॉक नहीं कहा जाएगा। यदि आप चाहते हैं कि आपका ब्लॉक तुरंत कॉल किया जाए तो 'चलो!' (विस्मयादिबोधक चिह्न के साथ) का प्रयोग करें। लेकिन मैं आपको ''पहले' ब्लॉक में अपना 'फैक्टरीगर्ल.क्रेट (उपयोगकर्ता)' रखने की सलाह दूंगा। – jdoe

+0

हां, यह वही है जो मैंने किया: 'पहले (: सभी) {5. टाइम्स {फैक्टरीगर्ल.क्रेट (: उपयोगकर्ता)}}; के बाद (: सभी) {User.delete_all} '। दोबारा - मदद के लिए धन्यवाद। – tomruss

0
let(:admin) { FactoryGirl.create(:admin) } 

कौन सा ठीक है, जब से तुम मिल गया है (कल्पना/factories.rb में)

factory :admin do 
    admin true 
end 

लेकिन इस बीच, मॉडल में/उपयोगकर्ता कांटा कर सकते हैं । आरबी:

attr_accessible :name, :email, :password, :password_confirmation 

मेरी शर्त यह है कि कारखाने की लड़की बड़े पैमाने पर असाइन कर रही है सेट करने के लिए ment: admin => true, जिसे attr_accessible द्वारा छोड़ा जा रहा है।

लेकिन अधिक महत्वपूर्ण बात यह है कि आप इसे कैसे डिबग करते हैं? पूछकर "क्या हो रहा है?" और "मैं क्या होने की उम्मीद करता हूं?" और तब तक भिन्नताएं जब तक आप पाते हैं कि दोनों प्रश्नों के उत्तर मध्य में मिलते हैं। इस मामले में, जिन प्रश्नों के साथ मैं शुरू करूंगा वे हैं: यह क्या है जो लिंक को प्रदर्शित करने का कारण बनता है? क्या यह मॉडल के बारे में सच है जिसे मैंने कल्पना में स्थापित किया है? क्या उन पृष्ठों को मारने का नमूना है जिन्हें मैं उम्मीद करता हूं? क्या मॉडल उसी तरह से काम कर रहा है जब मैंने ब्राउज़र के साथ पृष्ठ को मारा है क्योंकि यह कल्पना में है?

लेकिन ये सभी "क्या हो रहा है" की भिन्नताएं हैं? और "मैं क्या होने की उम्मीद करता हूं?"

+0

मुझे बिल्कुल नहीं पता कि फैक्ट्रीगर्ल इसके साथ कैसे व्यवहार करता है और व्यवस्थापक विशेषता सही ढंग से सेट की जाती है। यह एक और दिलचस्प सवाल है। वैसे भी यह मामला नहीं था (ऊपर देखें) लेकिन मदद के लिए धन्यवाद और ध्वनि सलाह के लिए - मैं इन डिबगिंग सवालों को लिख रहा हूं और इसे अपनी दीवार पर पिन कर रहा हूं :) – tomruss

+0

ठीक है, यह डिज़ाइन द्वारा है कि कारखानों बाईपास attr_accessible – tomruss