[ TDD ] 2. 테스트 코드 작성

GisangLee·2022년 8월 28일
0

tdd

목록 보기
3/3

1.pytest & pytest_dotenv

공식문서

pip install pytest
pip install pytest-dotenv

pytest.ini 파일

[pytest]
DJANGO_SETTINGS_MODULE = config.settings.dev
addopts = --reuse-db --nomigrations
env_files = .env

2. 사용자 앱 viewset 테스트

api/accounts/tests/test_accounts.py

@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

3. reverse url

각 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을 기준으로 자동 생성된다.


4. Execute tests

3가지 테스트에 대해 모두 통과하였다.


프로젝트 app을 만들고 나서 test를 진행하는 것을 습관들여야 겠다.


5. 테스트 coverage

pip install pytest-cov

테스트 파일이 담겨있는 폴더

pytest --cov=myproj/tests/

와우... 100 % 커버!!!! 기분이 좋다


profile
포폴 및 이력서 : https://gisanglee.github.io/web-porfolio/

0개의 댓글