2012-06-07 3 views
2

여러 환경 변수에 의존하는 장고 앱에 대한 테스트를 작성하기 시작했습니다. 셸에서 테스트 할 때 OS를 가져오고 변수를 지정하면 테스트가 정상적으로 작동합니다. 그러나, 내가 tests.py에 넣었을 때, 나는 그 변수가 발견되지 않았기 때문에 여전히 주요 오류를 얻는다. 내 검사는 다음과 같습니다.환경 변수가있는 장고보기 테스트

from django.utils import unittest 
from django.test.utils import setup_test_environment 
from django.test.client import Client 
import os 

os.environ['a'] = 'a' 
os.environ['b'] = 'b' 


class ViewTests(unittest.TestCase): 
    def setUp(self): 
     setup_test_environment() 

    def test_login_returning_right_template(self): 
     """ get/should return login.html template """ 
     c = Client() 
     resp = c.get('/') 
     self.assertEqual(resp.templates[0].name, 'login.html') 

변수를 초기화하는 데 잘못된 위치입니까? 나는 setUp에서 그것을 시도했지만, 같은 결과로 - 그들은 발견되지 않는다. 테스트 스위트를 실행하기 전에 환경 변수를 초기화하는 방법에 대한 제안 사항은 무엇입니까? 감사합니다. 루카

+0

당신의 문제의 원인은보기에서 os.envior에 의존하는 것이 나쁜 일이라는 것입니다. –

답변

3

귀하의 견해에서 os.envior를 중계하지 마십시오. 당신이해야하는 경우,

MY_CUSTOM_SETTING = os.environ.get('a', 'default_value') 

그리고 뷰에서

변수 설정을 사용하여 settings.py에서 할 :이 설정 설정할 수 있습니다 테스트에 그런
from django.conf.settings import MY_CUSTOM_SETTING 
print MY_CUSTOM_SETTING 

:

from django.test import TestCase 

class MyTestCase(TestCase): 

    def test_something(self): 
     with self.settings(MY_CUSTOM_SETTING='a'): 
      c = Client() 
      resp = c.get('/') 
      self.assertEqual(resp.templates[0].name, 'login.html') 
+0

감사합니다. 말이된다. – Lukich

+0

궁금한 점은 어떤 장고를 사용하고 계십니까? Mine (1.3.0)은 django.conf.settings에서 실패합니다. 하지만 여전히 django.conf 형식의 가져 오기 설정을 할 수 있습니다. – Lukich

+0

나는 그것을 테스트하지 않았다, 그것은 단지 생각이었다. 실제로 그것은 그것에서 실패해야합니다. –

관련 문제