Как смоделировать метод get_object в представлении Django Rest Framework? - PullRequest
0 голосов
/ 10 сентября 2018

Я играю с 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 неправильно?

...