#python #django
#python #django
Вопрос:
Как писать тесты для models.py файл?
from django.db import models
from django.conf import settings
from django.utils import timezone
from django.contrib.auth.models import User
class Profile(models.Model): #new
user = models.OneToOneField(User, on_delete=models.CASCADE)
institute = models.CharField(max_length=200, null=True)
department = models.CharField(max_length=200, null=True)
def __str__(self):
return 'Email:{} Department:{} Institute:{}'.format(self.user.email, self.institute, self.department)
class Access(models.Model):
user = models.ManyToManyField(User)
endpoint = models.CharField(
max_length=20,
choices=(
('pubmed', 'pubmed'),
('foster', 'foster'),
('med_apps', 'med_apps'),
('mayerson_transcripts', 'mayerson_transcripts'),
('all', 'all')
),
unique=True
)
def __str__(self):
return self.endpoint
class Request(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
created_time = models.DateTimeField(default=timezone.now)
url = models.CharField(max_length=1000)
def start(self):
self.created_time = timezone.now()
self.save()
def __str__(self):
return 'url:{} time:{}'.format(self.url, self.created_time)
Необходимо запустить тест в Visual Studio Code.
Кроме того, я видел много примеров написания тестов, но снова запутался. Похоже, мне нужно поработать над основами.
Ответ №1:
в зависимости от того, где находится ваша логика (в представлениях django или в моделях) и где происходили действия, вы пишете свои тесты, в примере выше я не вижу никакой логики или действия, я приведу простой пример, ниже приведен пример написания теста в представлении регистрации:
from django.test import Client
from django.test import TestCase
from account.models import Account
class TestSequenceFunctions(TestCase):
def test_signup_index_view(self): #Test number 1
response = self.client.post(reverse('acc:signup'), data=
{'fname':'ftest',
'lname':'ltest',
'email':'foo2@bar.com',
'password':'1111',
'pass2':'1111',
'field':'something',
'degree':'1',
}, follow=True)
self.assertEqual(response.status_code, 200)
Ответ №2:
Создайте test_models.py файл — обратите внимание, что рекомендуется иметь отдельный тестовый файл для представлений, моделей, API и т. Д:
test_views.py
test_api.py
test_models.py
test_tasks.py
Ваши модели довольно просты, и вы не можете протестировать ничего особенного. Вы можете, например, протестировать свою модель запроса и проверить, изменяет ли функция start поле created_time. Например:
def test_start(mocker):
request_model = RequestFactory.create()
request_model.start()
assert request_model.created_time == timezone.now()
Вы также можете издеваться над методом «сохранить» и утверждать, что он вызывается. Например:
save_patch = mocker.patch('app_name.models.Request.save')
save_patch.assert_called_once()
save_patch.assert_called_once_with(params)
Я бы рекомендовал начать с более простого примера, а не с поля часового пояса, поскольку я не уверен, есть ли задержка, которую тест может не пройти.
Вы можете найти, как имитировать объекты и утверждать, что они называются, используя Factory Boy и DjangoModelFactory для создания поддельных объектов для тестирования (таких как RequestFactory в примере).