원티드 과제에서 로그인 기능 단위테스트를 하던 중 발생한 에러입니다.
class SigninTest(TestCase) :
def setUp(self) :
User.objects.create(email='test@gmail.com', password='test1234!'
def tearDown(self) :
User.objects.all().delete()
def test_sign_in_success(self) :
client = Client()
login_info = {
'email' : 'test@gmail.com',
'password' : 'test1234!'
}
response = client.post('/users/signin', json.dumps(login_info), content_type='application/json')
self.assertEqual(response.status_code, 200)
self.assertEqual(response.json(),{
'access_token' : 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MX0.zZ8gW9Xqg2Qy4ilOjv1iQWM-XqpaU-AVgVfz7FkUzfQ'
})
로그인은 이메일과 비밀번호를 통해 진행되며, 회원가입 시 비밀번호는 암호화가 이루어집니다.
if not bcrypt.checkpw(password.encode('utf-8'), user.password.encode('utf-8')) :
return JsonResponse({'message' : 'INVALID USER'}, status=401)
위의 코드는 로그인 시 작성한 코드인데,
내가 입력한 비밀번호와 DB에 있는 비밀번호가 일치하는지 확인하는 작업입니다.
저는 당연히 로그인할때처럼 비밀번호를 입력하면 테스트가 돌아갈 줄 알았는데..
File "/Users/kylee/Desktop/Development/wanted/wanted_assignment/users/tests.py", line 86, in test_sign_in_success
response = client.post('/users/signin', json.dumps(login_info), content_type='application/json')
raise ValueError("Invalid salt")
ValueError: Invalid salt
라고 에러가 떴습니다.
확인해보니, 로그인을 하기 위해 setUp()에서 데이터를 만들 때
비밀번호를 암호화한채로 입력해줘야 되더군요
def setUp(self) :
User.objects.create(email='test@gmail.com', password=bcrypt.hashpw('test1234!'.encode('utf-8'), bcrypt.gensalt()).decode('utf-8'))
네.. 이렇게 비밀번호 데이터를 가상생성해줄 때, 만들어줘야 합니다
덕분에 unit test에 대해 감잡을 수 있었던 하루였습니다