2013-02-14 6 views
17

app.test_client().post('/users/login', ....)을 사용하는 nosetests를 통해 테스트를 실행할 때 내 응용 프로그램이 인데, 이는 None입니다.nosetests를 통해 플라스크 응용 프로그램을 테스트 할 때 IP 주소를 얻으십시오.

테스트를 실행할 때 어떻게 IP (127.0.0.1 작동)를 에뮬레이트 할 수 있습니까? post() 메서드를 사용하여 헤더에 보내고 nosetests, werkzeugs 및 flasks 문서를 파고 들었지만 환경 변수를 설정하려고 시도했지만 아무 것도 시도하지 않았습니다.

+0

가능한 중복을 [설정 (조롱) Flask 앱 유닛 테스트 요청 헤더] (http://stackoverflow.com/questions/15278285/setting-mocking-request-headers-for-flask-app-unit-test) – styvane

+0

@Styvane : Uhm,이 질문은 한 달입니다. 나이가 들수록 복제물은 어때? – moodh

+0

아마도 올바른 질문을 선택하지 않았지만 [가능합니다] (http://meta.stackexchange.com/questions/147643/should-i-vote-to-close-a-duplicate-question-even- though-its-much-new-and-ha/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

이제 내 테스트는 유효한 IP가 필요한 인스턴스를 통과하고 있습니다. 감사. – 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(...)