2010-09-15 19 views
6

जैसे अनुप्रयोग_कंट्रोलर विधियों तक पहुंचने के लिए मैं अपने वर्तमान_यूसर (एक संशोधित restful_authentication auth समाधान का उपयोग कर) rspec के साथ एक विधि को बाहर करने की कोशिश कर रहा हूं। मैं पूरी तरह से अनिश्चित हूं कि मैं अपने कंट्रोलर चश्मा में इस विधि को कैसे एक्सेस कर सकता हूं। current_user स्वयं काम नहीं करता है। क्या मुझे पहले नियंत्रक को प्राप्त करने की आवश्यकता है? मैं यह कैसे करु?आरएसपीईसी 'current_user'

rails 2.3.5, rspec 1.3.0 और rspec-rails 1.3.2

# my_controller_spec.rb 
require 'spec_helper' 

describe MyController do 

    let(:foos){ # some array of foos } 

    it "fetches foos of current user" do 
    current_user.should_receive(:foos).and_return(foos) 
    get :show 
    end 
end 

का उपयोग उत्पादन

NoMethodError in 'ChallengesController fetches foos of current user' 
undefined method `current_user' for #<Spec::Rails::Example::ControllerExampleGroup::Subclass_1::Subclass_1::Subclass_2::Subclass_2:0x7194b2f4> 

उत्तर

2

rspec-रेल आप नियंत्रक उदाहरण में इस्तेमाल के लिए एक controller विधि देता है। तो:

controller.stub!(:current_user).with(:foos).and_return(foos)

काम करना चाहिए।

+0

भयानक, मैं इस बाहर का परीक्षण करेंगे उल्लेख controller.stub की जरूरत है, btw, 'के बीच क्या फर्क है स्टब 'और' स्टब! ' – brad

+1

कोई नहीं - 'stub'' stub!' के लिए उपनाम है, इसलिए वे अदला-बदले – zetetic

+0

काम कर रहे हैं! एक गुच्छा thx – brad

0

मैं, बस Authlogic और वसीयत restful_authentication साथ पूरी तरह से परिचित नहीं हूँ, लेकिन यह शायद कि current_user में समान है एक नियंत्रक विधि है और कोई ऑब्जेक्ट नहीं, यही कारण है कि should_receive पर कॉल करना अपेक्षित काम नहीं कर रहा है (आप उस ऑब्जेक्ट पर एक अपेक्षा निर्धारित कर रहे हैं जो current_user देता है, लेकिन आपकी अपेक्षा के दायरे में विधि पहुंच योग्य नहीं है)।

इस प्रयास करें:

stub!(:current_user).and_return(foos)

+0

मैं इसे) नहीं मिल टी बस ठूंठ साथ owork (सकता है मैं के रूप में ऊपर – brad

1

यह कैसे पता चलेगा कि current_user कहां से मिलना है? इसे हल करना चाहिए:

subject.current_user.should_receive(:foos).and_return(foos) 
0

मैंने इसे पढ़ा और थोड़ा सा tweaked। आप बस अपने Rspec परीक्षण में एक उपयोगकर्ता ऑब्जेक्ट में पास करना चाहते हैं, तो आप इस का उपयोग कर सकते हैं:

  1. पहले, rspec परीक्षण के भीतर एक उपयोगकर्ता ऑब्जेक्ट बनाने। उदाहरण के लिए: (। उपयोग जो भी जिम्मेदार बताते हैं आप की जरूरत या उपयोगकर्ता वस्तु बनाने के लिए आवश्यक हैं)

    उपयोगकर्ता = User.create (नाम: "टेड")

    (नोट: आप भी से एक कारखाने का उपयोग कर सकते FactoryGirl)

  2. अब, जो चर "उपयोगकर्ता", कि एक ही Rspec परीक्षण के भीतर ऐसा करने में सहेजा गया है कि उपयोगकर्ता वस्तु के साथ:।!

    controller.stub (: current_user) .and_return (उपयोगकर्ता)

कि काम करना चाहिए ...

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