2013-02-14 43 views
17

के माध्यम से फ्लास्क एप्लिकेशन का परीक्षण करते समय आईपी पता प्राप्त करें मेरा आवेदन request.remote_addr पर निर्भर करता है जो None है जब मैं app.test_client().post('/users/login', ....) का उपयोग करने वाले नोसेटेट्स के माध्यम से परीक्षण चलाता हूं।नोसेटेट्स

जब मैं परीक्षण चलाता हूं तो मैं एक आईपी (127.0.0.1 ठीक काम करता है) का अनुकरण कैसे कर सकता हूं? मैंने पर्यावरण चर सेट करने की कोशिश की है, पोस्ट() विधि के साथ हेडर में भेजा गया है और मैंने नोसेटेट्स, वेर्कजेज और फ्लास्क दस्तावेज के माध्यम से खोला है लेकिन मैंने कोशिश की है कि कुछ भी काम नहीं किया है।

+0

की संभावित डुप्लिकेट [स्थापना (मजाक) फ्लास्क ऐप यूनिट टेस्ट के लिए हेडर अनुरोध करें] (http://stackoverflow.com/questions/15278285/setting-mocking-request-headers-for-flask-app-unit-test) – styvane

+0

@Styvane: उम, यह प्रश्न एक महीने है पुराना, यह एक डुप्लिकेट कैसा है? – moodh

+0

शायद मैंने सही सवाल नहीं चुना लेकिन [हाँ यह संभव है] (http://meta.stackexchange.com/questions/147643/should-i-vote-to-close-a-duplicate-question-even- यद्यपि यह-बहुत-नया-और-हा/147651 # 147651) – styvane

उत्तर

24

आप environ_base का उपयोग कर अंतर्निहित WERKZEUG पर्यावरण के लिए विकल्पों को सेट कर सकते हैं:

from flask import Flask, request 
import unittest 

app = Flask(__name__) 
app.debug = True 
app.testing = True 

@app.route('/') 
def index(): 
    return str(request.remote_addr) 

class TestApp(unittest.TestCase): 

    def test_remote_addr(self): 
     c = app.test_client() 
     resp = c.get('/', environ_base={'REMOTE_ADDR': '127.0.0.1'}) 
     self.assertEqual('127.0.0.1', resp.data) 


if __name__ == '__main__': 
    unittest.main() 
+0

धन्यवाद, यह पूरी तरह से काम करता है लेकिन इसमें शामिल होना है कि प्रत्येक कॉल पर थकाऊ हो जाएगा। एक दोस्त ने मुझे ठीक करने का समाधान दिया जो हर कॉल को बदल देता है। इसे एक उत्तर के रूप में भी पोस्ट करना। – moodh

+0

+1 ऐसा लगता है कि werkzeug का इरादा यह है कि आप ऐसा करने के लिए चाहते थे और वही था जो मैं –

+0

के लिए देख रहा था, अब मेरे परीक्षण ऐसे मामलों में गुज़र रहे हैं जिनके पास वैध आईपी होना आवश्यक है। धन्यवाद। – iChux

9

एक दोस्त ने मुझे इस समाधान है, जो सभी अनुरोधों में काम करता दिया:

class myProxyHack(object): 

    def __init__(self, app): 
     self.app = app 

    def __call__(self, environ, start_response): 
     environ['REMOTE_ADDR'] = environ.get('REMOTE_ADDR', '127.0.0.1') 
     return self.app(environ, start_response) 

app.wsgi_app = myProxyHack(app.wsgi_app) 

app.test_client().post(...)