2010-01-08 10 views
9

परीक्षण उद्देश्यों के लिए मैं request.remote_ip के वापसी मूल्य को बदलना चाहता हूं। मेरी विकास मशीन पर होने पर यह हमेशा 127.0.0.1 देता है जैसा कि इसे करना चाहिए, लेकिन मैं अपने ऐप के सही व्यवहार का परीक्षण करने के लिए खुद को अलग-अलग नकली आईपी देना चाहता हूं, इसे पहले लाइव सर्वर पर तैनात किए बिना!रेल पर रूबी में request.remote_ip का मूल्य बदलें

धन्यवाद।

उत्तर

13

आप अपने पूरे आवेदन में इस कार्यक्षमता चाहते हैं, यह बेहतर/आसान हो सकता है में remote_ip विधि ओवरराइड करने के लिए अपने app/helpers/application_helper.rb:

class ActionDispatch::Request #rails 2: ActionController::Request 
    def remote_ip 
    '1.2.3.4' 
    end 
end 

और 1.2.3.4 पते हर जगह उपलब्ध

+0

बिल्कुल सही! वह चाल है। बहुत बहुत धन्यवाद। – Matt

4

आप का उपयोग कर अनुरोध वस्तु को संशोधित कर सकते हैं:

अब
request = ActionController::Request.new('REMOTE_ADDR' => '1.2.3.4') 

request.remote_ip रिटर्न 1.2.3.4

+0

इस नए आईपी के साथ अनुरोध वर्तमान के लिए ही उपलब्ध बनाता है गुंजाइश। मुझे पूरे एप्लिकेशन के लिए इसे बदलने का एक तरीका चाहिए। – Matt

+0

आप सही हैं, मैंने इसे आपके पूरे एप्लिकेशन – Veger

5

आप परीक्षण परिवेश में remote_ip मूल्य जो सामान्य रूप से नहीं है के लिए एक mutator बनाकर एक सा धोखा कर सकते हैं परिभाषित।

उदाहरण के लिए निम्नलिखित के साथ परीक्षण/test_helper.rb के अंदर वर्ग में परिवर्तन:

class ActionController::TestRequest 
    def remote_ip=(value) 
    @env['REMOTE_ADDR'] = value.to_s 
    end 
end 

फिर, अपने परीक्षण के लिए आवश्यक के रूप में आप पुन: असाइन कर सकते हैं के दौरान:

def test_something 
    @request.remote_ip = '1.2.3.4' 
end 

यह किया जा सकता है या तो व्यक्तिगत परीक्षण में, या अपने सेटअप दिनचर्या के भीतर, जहां भी उचित हो।

मैं जब कार्यात्मक परीक्षण है कि प्रतिबंध लगाने आईपी, जियोलोकेशन, आदि की पुष्टि लिखने से पहले यह उपयोग करने के लिए पड़ा है

+0

के लिए सक्षम करने के लिए एक नया उत्तर जोड़ा है, यह उस दिशा में अधिक जाता है जिसमें मैं जाना चाहता हूं। लेकिन मैं इसे विकास पर्यावरण/मैनुअल परीक्षण के लिए उपलब्ध करना चाहता हूं। क्या कोई ऐसी जगह है जहां मैं @env ['REMOTE_ADDR'] = "1.2.3.4" डाल सकता हूं? – Matt

3

क्या मैं अब क्या कर समाप्त हो गया यकीन है कि यह है बनाने के लिए config/environments/development.rb फ़ाइल के अंत में इस कोड डाल करने के लिए किया गया है विकास के दौरान केवल

# fake IP for manuel testing 
class ActionController::Request 
    def remote_ip 
    "1.2.3.4" 
    end 
end 

तो यह सर्वर शुरू होने पर दूरस्थ रूप से 1.2.3.4 पर सेट करता है। हर बार जब आप उस सर्वर को पुनरारंभ करते हैं जो आपको सर्वर को पुनरारंभ करना है!

0

यह उत्तर केवल rails3 के लिए काम करता है (मैं इस सवाल का जवाब जब रेल 3 के लिए एक समान सवाल का जवाब देने की कोशिश कर रहा पाया जाता है),

तो मैं इसे मामले में यहाँ पोस्ट करेंगे अगर किसी में ऐसा ही करते कोशिश कर रहा है Rails3 env

class ActionDispatch::Request 
    def remote_ip 
    '1.2.3.4' 
    end 
end 

HTH

2

रेल 4.0.1 आर सी। इस सरल उपाय कोड करने के लिए :)

get '/', {}, { 'REMOTE_ADDR' => '1.2.3.4' } 
1

एकीकरण परीक्षण के लिए खुदाई करते हुए पाया खोज के घंटे के बाद, इस रेल 5 के साथ काम करता है:

get "/path", params: { }, headers: { "REMOTE_ADDR" => "1.2.3.4" } 
संबंधित मुद्दे