Я играю с build
(в отличие от create
) методом FactoryBoy в Django. Это создает объекты без сохранения их в базе данных.
Поэтому, чтобы тесты моих представлений работали, мне нужно исправить методы, которые касаются базы данных.
Вот код ...
models.py:
class Book(models.Model):
title = models.CharField(max_length=100)
serializers.py:
class BookSerializer(serializers.ModelSerializer):
class Meta:
model = Book
fields = ('name')
views.py:
class BookViewSet(viewsets.ModelViewSet):
def get_queryset(self):
return Book.objects.all()
def get_serializer_class(self):
return BookSerializer
tests.py:
class BookFactory(factory.DjangoModelFactory):
title = factory.Faker('sentence', nb_words=4)
class Meta:
model = "Book"
def my_test():
client = APIClient()
books = BookFactory.build_batch(10)
list_url = reverse("books-list")
with patch.object(BookViewSet, "get_queryset", return_value=books):
list_url = reverse("books-list")
response = client.get(list_url)
# this works
assert response.content = <a list of books>
with patch.object(BookViewSet, "get_object", return_value=books[0]):
detail_url = reverse("books-detail", args=123)
response = client.get(detail_url)
# this is always empty..
assert response.content == <a book>
Независимо от того, что я пытаюсь, детальный вид всегда возвращает пустой JSON. Я использую patch
неправильно?