해결된 질문
작성
·
218
·
수정됨
0
해결완료...
user: User = User.create(username=request.username, hashed_password=hashed_password)
저 부분에서 username 안하고, positional Arugment처럼
User.create(request.username)이런 식으로 코드를 썻네요.. 파이썬에서는 named Argument형식을 맞춰야 하나요?
test api user 코드 입니다.
def test_user_sign_up(client, mocker):
hash_password = mocker.patch.object(
UserService, "hash_password", return_value="hashed"
)
user_create = mocker.patch.object(
User, "create", return_value=User(id=None, username="test", password="hashed")
)
mocker.patch.object(
UserRepository,
"save_user",
return_value=User(id=1, username="test", password="hashed"),
)
body = {"username": "test", "password": "plain"}
response = client.post("/users/sign-up", json=body)
hash_password.assert_called_once_with(plain_password="plain")
user_create.assert_called_once_with(username="test", hashed_password="hashed")
assert response.status_code == 201
assert response.json() == {"id": 1, "username": "test"}
깃 헙 나온 코드로도 해봤지만, 여전히
user_create.assert_called_once_with()
이 부분에서 에러가 납니다. 주석처리하면 잘 통과 되구요.
아래가 에러 메세지 내용이고, 혹시 오타 있을까봐 깃허브 코드 그대로 가져와도 동일하네요.
test_users_api.py:5 (test_user_sign_up)
{'hashed_password': 'hashed'} != {'hashed_password': 'hashed', 'username': 'test'}
Expected :{'hashed_password': 'hashed', 'username': 'test'}
Actual :{'hashed_password': 'hashed'}
expected는 적었떤 username="test"가 나와야 하는데 , 실제는 없나봅니다. 그래서
user_create.assert_called_once_with(hashed_password="hashed") 이런식을 변경하면, 아래처럼 여전히 통과 하지 못하네요
('test',) != ()
Expected :()
Actual :('test',)
답변 1
0
안녕하세요. 빠르게 해결하셨다니 다행입니다.
아래와 같이 arguments를 호출한 방법에 따라서 assert_called_once_with 사용 방법이 달라지게 됩니다.
Keyword Arguments (강의 예시)
User.create(username=request.username, hashed_password=hashed_password)
user_create.assert_called_once_with(username="test", hashed_password="hashed")
Positional Arguments
User.create(request.username, hashed_password)
user_create.assert_called_once_with("test", "hashed")
참고: https://docs.python.org/3/library/unittest.mock.html#unittest.mock.Mock.assert_called_with