Работа над проведением некоторых юнит-тестов с Django и попытка провести некоторое тестирование с помощью процесса входа в систему с помощью формы входа.
Я использую модифицированную модель User
только для того, чтобы сделать поле электронной почты уникальным;в остальном ничто радикально не отличается.
account / views.py
def post(self, request):
# Retrieve the username and password
username = request.POST['username']
password = request.POST['password']
# Create a user object from authentication, or return None
user = authenticate(username=username, password=password)
# Check if user was created
if user is not None:
# Rest of the code, irrelevant...
account / test_views.py
from account.models import User as CustomUser
# Code snippit
def test_account_login_POST_successful_login(self):
# Create a user to test login
CustomUser.objects.create_user(
username='test_user',
email='test_user@intranet.com',
password='flibble'
)
response = self.client.post(self.login_url, {
'username': 'test_user',
'password': 'flibble'
})
self.assertEqual(response.status_code, 301)
account / models.py
class User(AbstractUser):
# Make the email field unique
email = models.EmailField(unique=True)
project / settings.py
# Authentication
AUTH_USER_MODEL = 'account.User'
Забавно, что вход в систему нормально работает в веб-приложении, но при тестировании всегда возвращает None
.
Я пыталсяcheck_password()
с созданным пользователем, и он возвращает true как в методе test, так и в методе view.
Я также пытался вставить AUTHENTICATION_BACKEND = ['django.contrib.auth.backends.ModelBackend']
, но не пошел.