클린 코드를 위한 테스트 주도 개발 6
2016-09-24
p.163
사실 8, 9장은 멘토님께서 그냥 넘어가도 된다고 했지만 애초에 책에 있는 모든 오류를 찾아내겠다고 첫 포스팅을 시작했기 때문에 그냥 하기로 했다. 사실 그리 어려운 문제는 아니다. 안그래도 책 읽는 속도가 느린데(…) p.156 의 functional_tests/tests.py
를 치면 아래와 같은 에러가 생긴다.
type object 'NewVisitorTest' has no attribute 'server_thread'
이는 p.156 의 functional_tests/tests.py
에서 tearDownClassgi
함수를 제거해주면 된다. 따라서 p.156 의 functional_tests/tests.py
는 아래와 같이 바뀐다.
class NewVisitorTest(StaticLiveServerTestCase):
@classmethod
def setUpClass(cls):
for arg in sys.argv:
if 'liveserver' in arg:
cls.server_url = 'http://' + arg.split('=')[1]
return
super().setUpClass()
cls.server_url = cls.live_server_url
def setUp(self):
[...]
하지만 이대로 치면 아래와 같은 에러가 생긴다.
AttributeError: 'NewVisitorTest' object has no attribute 'server_url'
setUpClass
함수 내부 곳곳에 print를 찍어본 결과 for
문 내에 진입은 하는데 if 'liveserver' in arg:
안으로는 진입이 되지않았다. 그래서 arg를 모두 출력해 보았다.
Creating test database for alias 'default'... , manage.py , test , functional_tests , --liveserver=superlists-52.78.139.60 E ====================================================================== ERROR: setUpClass (functional_tests.tests.NewVisitorTest) ---------------------------------------------------------------------- [..이하생략..]
arg
내에 liveserver
라는 인자가 내 서버주소를 가지고있는 것인줄 알았는데 아니었다. 따라서 바뀐 나의 코드는 아래와 같다. 여러분의 주소에 맞게 적당히 적어주면 된다. aws 12개월의 무료 티어 이용이 끝났기 때문에 서울 리전에서 t2.nano
를 쓰는중이다. AWS EC2 요금. 블로그 방문자 수가 적어서 상관없을 것 같지만 괜히 내 서버에 장난은 안했으면 좋겠다. ㅜㅜ
class NewVisitorTest(StaticLiveServerTestCase):
@classmethod
def setUpClass(cls):
for arg in sys.argv:
# print(" , ", arg)
if '--liveserver=superlists-52.78.139.60' in arg:
cls.server_url = 'http://52.78.139.60'
return
super().setUpClass()
cls.server_url = cls.live_server_url
def setUp(self):
[...]
(venv-3.5.2) choehyeseonui-MacBook-Pro:superlists hsun$ python manage.py test functional_tests --liveserver=superlists-52.78.139.60 Creating test database for alias 'default'... […] selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"id","selector":"id_new_item"} […] self.assertIn('To-Do', self.browser.title) AssertionError: 'To-Do' not found in 'Welcome to nginx!' ---------------------------------------------------------------------- Ran 2 tests in 9.769s FAILED (failures=1, errors=1) Destroying test database for alias 'default'...
‘진짜’ 진전이 있다!