Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 코테
- boj
- CSV
- django
- aws
- Linked list
- SQL
- 시뮬레이션
- 알고리듬
- spring boot
- 알고리즘
- BFS
- 구현
- 모의SW역량테스트
- SWEA
- DFS
- Algorithm
- GitHub
- Trie
- Priority Queue
- hash table
- Bruth Force
- Python
- JavaScript
- programmers
- Vue.js
- Back tracking
- gpdb
- Data Structure
- 코딩테스트
Archives
- Today
- Total
hotamul의 개발 이야기
[Django] User Model 커스터마이징 #4 (TDD) 본문
[Django] User Model 커스터마이징 #3 (TDD) 에서 User
, UserManager
클래스를 직접 커스터마이징 하여 user model을 생성하는 테스트를 통과하게 했다.
이제는 email normalizing 기능 추가와 email을 전달하지 않았을때 exception이 발생할 수 있도록 해보자.
test 작성
먼저 [Django] User Model 커스터마이징 #2 (TDD)에서 작성했던 test_models.py
에 다음과 같은 테스트를 추가해 보자.
def test_new_user_email_normalized(self):
"""Test email is normalized for new users."""
sample_emails = [
['test1@EXAMPLE.com', 'test1@example.com'],
['Test2@Example.com', 'Test2@example.com'],
['TEST3@EXAMPLE.COM', 'TEST3@example.com'],
['test4@example.COM', 'test4@example.com']
]
for email, expected in sample_emails:
user = get_user_model().objects.create_user(email, 'sample123')
self.assertEqual(user.email, expected)
위 테스트는 @
이전 이메일 이름은 대문자, 소문자를 허용하지만 @
이후 도메인은 항상 소문자이어야 한다는 것을 의미한다.
normalize_email
User
와 UserManager
를 만들었던 models.py
로 돌아와 UserManager
의 create_user
메소드만 아래와 같이 변경해준다.
def create_user(self, email, password=None, **extra_fields):
"""Create, save and return a new user."""
user = self.model(email=self.normalize_email(email), **extra_fields)
user.set_password(password)
...
ValueError
: test
위에서 normalize 기능을 추가했던 것처럼 먼저 test_models.py
에 아래 테스트 코드를 작성한다.
def test_new_user_without_email_raises_error(self):
"""Test that creating a user without an email raises a ValueError."""
with self.assertRaises(ValueError):
get_user_model().objects.create_user('', 'test123')
위 테스트는 create_user
email 전달인자에 ''
만 전달했을 때 ValueError
라는 exception이 발생한다는 테스트 코드이다.
이제 테스트가 통과 할 수 있도록 create_user
에 제어문을 추가하자.
ValueError
UserManager
의 create_user
메소드를 다음과 같이 수정하자
def create_user(self, email, password=None, **extra_fields):
"""Create, save and return a new user."""
if not email:
raise ValueError('User must have an email address.')
user = self.model(email=self.normalize_email(email), **extra_fields)
user.set_password(password)
...
python manage.py test
명령어로 확인하면 테스트가 모두 통과함을 확인할 수 있다.
'Dev. > Django' 카테고리의 다른 글
[Django] User Model 커스터마이징 #6 (TDD) (0) | 2022.07.13 |
---|---|
[Django] User Model 커스터마이징 #5 (TDD) (0) | 2022.07.06 |
[Django] User Model 커스터마이징 #3 (TDD) (0) | 2022.07.01 |
[Django] User Model 커스터마이징 #2 (TDD) (0) | 2022.06.30 |
[Django] User Model 커스터마이징 #1 (0) | 2022.06.29 |
Comments