Юнит-тест Django не выполняется
Я все еще борюсь с тестами в Django. Сейчас я переписал тест, но он не выполняется, и я не вижу результатов, когда запускаю команду test. Это из-за неправильного теста или я что-то упускаю? Еще раз спасибо :)
Модели:
class Lab(models.Model):
lab_name = models.CharField(max_length=200)
category = models.ForeignKey(Category, unique=True, null=True, on_delete=models.PROTECT)
pub_date = models.DateTimeField('date published')
lab_theory = models.TextField()
def __str__(self):
return self.lab_name
class QuestionMultipleChoice(models.Model):
lab = models.ForeignKey(Lab, on_delete=models.CASCADE)
type = QuestionType.multiplechoice
question = models.CharField(max_length=200,null=True)
option1 = models.CharField(max_length=200,null=True)
option2 = models.CharField(max_length=200,null=True)
option3 = models.CharField(max_length=200,null=True)
option4 = models.CharField(max_length=200,null=True)
answer = models.IntegerField(max_length=200,null=True)
def __str__(self):
return self.question
@property
def html_name(self):
return "q_mc_{}".format(self.pk)
@property
def correct_answer(self):
correct_answer_number = int(self.answer)
correct_answer = getattr(self, "option{}".format(correct_answer_number))
return correct_answer
def check_answer(self, given):
return self.correct_answer == given
Тест:
def test_past_question(self):
"""
Questions with a pub_date in the past are displayed on the
index page.
"""
past_date = date(1997, 3, 2)
lab2 = Lab.objects.create(lab_name="test lab past question", pub_date=past_date, lab_theory="test lab past question")
past_question = QuestionMultipleChoice.objects.create(lab=lab2, question='This is a test question', option1='1', option2='2', option3='3', option4='4', answer='1')
response = self.client.get(reverse('labs:index'))
print (response)
self.assertEqual(str(past_question),'This is a test question')
Для того, чтобы тест был обнаружен DiscoverRunner
Django, он должен соответствовать следующим критериям:
- Метод должен начинаться с
test_
- Метод должен быть в классе, который наследуется от
django.test.TestCase
.
TestCase
должен находиться в файле, который следует шаблонуtest*.py
glob. .
- Если у вас есть
myapp.tests
в качестве модуля, все файлы под ним должны по-прежнему удовлетворятьtest*.py
glob-шаблону и должен быть__init__.py
из этогоtests
модуля.
Это должно быть верно, если вы не замените TEST_RUNNER
на Pytest или что-то еще. Я могу что-то упустить, поэтому дайте мне знать, если это так, и я смогу отредактировать комментарий с более подробной информацией относительно вашей конкретной ситуации.
Некоторая документация и DiscoverRunner
источник.