Объект Django Factory Boy не существует
У меня есть вопрос относительно использования фабричного мальчика в тестировании моего Предположим, у меня есть эти три модели:
Class Company(models.Model):
name = str
Class Domain(models.Model):
company = ForeignKey(ref=Company)
name = str
created_at = datetime
Class Record(models.Model):
domain = ForeignKey(ref=Domain)
name = str
created_at = datetime
CompanyFactory(factory.django.DjangoModelFactory):
name = str
DomainFactory(factory.django.DjangoModelFactory):
company = factory.SubFactory(CompanyFactory)
name = str
created_at = datetime
RecordFactory(factory.django.DjangoModelFactory):
domain = factory.SubFactory(DomainFactory)
name = str
created_at = datetime
После этого, когда я тестирую представления Record
, в начале каждого представления я проверяю, что объект Domain
действительно связан с объектом Company
, например:
try:
domain = Domain.objects.get(domain=domain_id, company__id=company_id)
except ObjectDoesNotExist:
return Response(
data={"message": "Domain isn't related to the company provided."}, status=status.HTTP_403_FORBIDDEN
)
Но этот код всегда возвращает исключение ObjectDoesNotExist, когда я провожу тестирование с помощью pytest+factory-boy, но когда я провожу ручное тестирование, все работает нормально. Вы сталкивались с чем-то подобным? Что я упускаю?
Заранее спасибо.
Как дела?
тестовый код не был включен, но я попытаюсь сделать выводы
when I do manual testing runs fine
кажется, что вы уже заполнили базу данных! но послушайте, когда вы запустите свой тестовый пакет, django будет использовать "тестовую базу данных" в пользу изоляции!
что вам нужно сделать, это создать, используя factory_boy
lib, ваши "приспособления для данных"!
мое предложение без какого-либо контекста:
class MyTestCase(TestCase):
def setUp(self):
self.existing_domain_in_database = DomainFactory.create(...) # insert here the data to populate this model
и нужные данные уже должны существовать в ur "test database" для каждого теста, который будет выполняться внутри этого класса
По просьбе @gbrennon я добавляю тестовый код:
Hi! Thanks for answering.
Мой тестовый код выглядит следующим образом:
`class RecordCompanyAdminTests(CompanyAdminUser):
def setUp(self):
super(RecordCompanyAdminTests, self).setUp()
self.domain = DomainFactory.create()
self.record = RecordFactory.create()
def test_record_list_get(self):
url = reverse("autoprovisioning:record_list", kwargs={"company_id": self.company.id, "domain_id": self.domain.id})
response = self.client.get(url, format="json")
self.assertEqual(response.status_code, status.HTTP_200_OK)`