2010-01-19 13 views
15

मेरे ऐप में कुछ कार्यक्षमता क्लाइंट के आईपी पते के आधार पर अलग-अलग काम करती है। क्या रेलवे कार्यात्मक परीक्षणों में परीक्षण करने का कोई तरीका है? मैं टेस्ट :: यूनिट और कंधे का उपयोग कर रहा हूं।रेल नियंत्रक परीक्षणों में, क्या एक विशिष्ट रिमोट आईपी अनुकरण करने का कोई तरीका है?

उत्तर

31

आप अपने नियंत्रक कॉल से पहले REMOTE_ADDR पर्यावरण परिवर्तक को बदलकर आसानी से इसे बिना कर सकते हैं।

def test_should_reject_ip_1_2_3_4 
    @request.env['REMOTE_ADDR'] = '1.2.3.4' 
    get :index 
    assert_redirected_to root_path 
end 

आप दूरस्थ स्थापित कर रहे हैं:

def index 
    if request.remote_ip == '1.2.3.4' 
    redirect_to root_path 
    return 
    end 

    @articles = Article.all 
end 

यहाँ आप कैसे परीक्षण कर सकते हैं कि यह काम करता है: यहाँ एक काल्पनिक नियंत्रक कि घर पथ पर रीडायरेक्ट अगर उनके आईपी पते 1.2.3.4 है नियंत्रक कॉल के पहले आईपी, इसलिए आप किसी भी विशेष प्लगइन या रत्न के बिना डेटा नकली करने में सक्षम हैं।

context "with ip 1.2.3.4" do 
    setup do 
    @request.env['REMOTE_ADDR'] = '1.2.3.4' 
    get :index 
    end 

    should_not_assign_to :items 
    should_redirect_to("home"){home_path} 
    should_not_set_the_flash 
end 
1

प्राप्तकर्ता नियंत्रक को आईपी पते (या पैरामीटर के रूप में प्राप्त करने) का पता लगाने के लिए एक विधि की आवश्यकता होती है, और आपको अपने परीक्षण के लिए एक विशिष्ट आईपी पता लगाने के लिए या केवल पैरामीटर के रूप में परीक्षण आईपी पते निर्दिष्ट करने की आवश्यकता है प्रक्रिया।

यदि आपका ऐप जो कुछ भी करता है, उस पर विचार करना आसान नहीं है, तो आप क्या कर सकते हैं, "कस्टम कार्यक्षमता" आपके घर नेटवर्क पर किसी अन्य कंप्यूटर पर लागू होती है, यदि आपके पास कोई है, और इस तरह ऐप का परीक्षण करें। हालांकि वास्तव में "यूनिट टेस्ट के माध्यम से इसे हल करें" उत्तर हल नहीं करता है।

क्या मैं पूछ सकता हूं कि आपका ऐप आईपी पते के आधार पर एक विशिष्ट कार्रवाई क्यों करेगा? शायद एक और तरीका है।

+0

क्यों पता लगाने के आईपी: एप्लिकेशन अलग यूआई कि क्या उपयोगकर्ता के अंदर या बाहर के आधार पर तत्वों से पता चलता हमारी स्थानीय नेटवर्क। – Ethan

1

आप अनुरोधों को दबाकर और एक नकली ऑब्जेक्ट लौटकर इसे पूरा करने में सक्षम होना चाहिए जिसमें request.remote_ip वांछित आईपी पते के बराबर है।

मैं इस पर सहायता के लिए FakeWeb पर देखता हूं। यह आपको अपेक्षित अनुरोध/प्रतिक्रियाओं को आसानी से सेट करने देता है। रेलवे खुद does these kinds of tests कैसे देख सकता है यह देखने के लिए भी निर्देशक हो सकता है।

0

मणि "मोचा" का उपयोग आप कर सकते हैं: और यहाँ चाहिये संस्करण, ItemsController के लिए है

test "should something" do 
    request.expects(:remote_ip).returns("189.81.139.183") 
    ... 
end 
संबंधित मुद्दे

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