pip install pytest
pip install pytest-dotenv
[pytest]
DJANGO_SETTINGS_MODULE = config.settings.dev
addopts = --reuse-db --nomigrations
env_files = .env
@pytest.mark.urls(urls="config.urls")
@pytest.mark.django_db
def test_user_set(rf, client):
url = reverse(viewname="accounts-list")
response = client.get(url)
data = json.loads(response.content)
assert len(data.get("message")) == 0
assert response.status_code == status.HTTP_200_OK
@pytest.mark.urls(urls="config.urls")
@pytest.mark.django_db
def test_create_user_failiure(rf, client):
url = reverse(viewname="accounts-list")
not_enough_data = {
"username": "테스트 계정 1",
"password": "qwe123",
"gender": "m",
"age": 19,
}
response = client.post(url, data = not_enough_data)
data = json.loads(response.content)
assert data.get("errors") == "에러"
assert response.status_code == status.HTTP_400_BAD_REQUEST
@pytest.mark.urls(urls="config.urls")
@pytest.mark.django_db
def test_create_user_success(rf, client):
url = reverse(viewname="accounts-list")
good_data = {
"username": "테스트 계정 1",
"email": "test@gmail.com",
"password": "qwe123",
"gender": "m",
"age": 21,
}
response = client.post(url, data = good_data)
data = json.loads(response.content)
assert data.get("message") == "회원가입 완료"
assert response.status_code == status.HTTP_201_CREATED
각 api uri는 viewname을 가지고 있다.
api-v1/accounts ^//$ [name='accounts-list']
api-v1/accounts ^\.(?P<format>[a-z0-9]+)/?$ [name='accounts-list']
api-v1/accounts ^//(?P<pk>[^/.]+)/$ [name='accounts-detail']
api-v1/accounts ^//(?P<pk>[^/.]+)\.(?P<format>[a-z0-9]+)/?$ [name='accounts-detail']
api-v1/accounts ^$ [name='api-root']
api-v1/accounts ^\.(?P<format>[a-z0-9]+)/?$ [name='api-root']
api-v1/accounts/login
__debug__/
^media/(?P<path>.*)$
name = 'accounts-list'와 같이
각 api는 뷰 이름이 있는데
modelviewset은 api를 라우터로 관리할 경우
basename을 기준으로 자동 생성된다.
3가지 테스트에 대해 모두 통과하였다.
프로젝트 app을 만들고 나서 test를 진행하는 것을 습관들여야 겠다.
pip install pytest-cov
pytest --cov=myproj/tests/
와우... 100 % 커버!!!! 기분이 좋다