Правильный способ тестирования методов чистой формы Django с помощью pytest

#pytest #pytest-django

#pytest #pytest-django

Вопрос:

У меня есть clean_email метод, в котором я изменяю ввод поля электронной почты на нижний регистр, чтобы избежать проблем с дублированием с учетом регистра.

Что у меня есть

форма

 class UserAdminCreationForm(forms.ModelForm):

    class Meta:
        model = User
        fields = ("username", "email", "names", "last_names", "identification_number")
    
    def clean_email(self) -> str:
        """Convert all username to lowercase to avoid duplicity problems with case-sensitive."""
        email = self.cleaned_data["email"]
        return email.lower()
  

Тест

 class TestUserCreationForm:
    def test_clean_email(self):
        proto_user = UserFactory.build()  # User created with factory boy.

        form = UserAdminCreationForm(
            {
                "username": proto_user.username,
                "email": proto_user.email,
                "names": proto_user.names,
                "last_names": proto_user.last_names,
                "identification_number": proto_user.identification_number,
            }
        )

        assert form.is_valid()
        assert form.clean_email() == form.cleaned_data["email"].lower()
  

Проблема

Несмотря на то, что тест пройден, когда я генерирую отчет о покрытии, инструкция, return email.lower() полученная из clean_email метода, отображается как непроверенная.

Комментарии:

1. Вы проверили, что код достигнут (с помощью отладчика или печати)? Для меня это выглядит как проблема покрытия, а не проблема с кодом.

2. @MrBeanBremen Я не знаю, что произошло, но иногда отчет о покрытии изменяет процент покрытия и иногда показывает некоторые строки как непроверенные, а другие — как 97 или 100% покрытие… Я ничего не меняю в своих тестах.

3. Это звучит довольно странно. Из вашего кода ясно, что рассматриваемая строка должна быть покрыта, но я не понимаю разных результатов покрытия после выполнения одного и того же теста — насколько я вижу, в вашем коде нет ничего случайного…

4. @MrBeanBremen Я не знаю, что случилось, я меняю свои тесты, после этого я создаю свой отчет о покрытии и не сразу принимает изменения, я запускаю его пару раз и ничего, я случайно закрыл IDE (pycharm) или запустил тест 4 или 5 раз, а затем принял изменения. Это действительно расстраивает, потому что я использую этот отчет, чтобы визуализировать, какие части моего кода отсутствуют для тестирования.