Pewget
@Pewget
Программист

Как проверить изменения в БД при тестировании django view?

Всем привет!

Пытаюсь написать тест для django view.
Во view производятся некоторые изменения модели и мне хотелось бы проверить, произошли ли они в итоге.

Например:
# models.py
class Post(models.Model):
    title = models.CharField(max_length=255)

# view.py
def index(request):
    post = Post.objects.get(pk=1)
    post.title = "Second post"
    post.save()
    return HttpResponse(post.title)


Я пишу тест, в котором создается пост с title "Hello World". Т.к. во view title поста меняется на "Second post", логично было бы предположить, что мы в итоге получим это значение и в тесте.

# tests.py
class BlogTest(TestCase):
    def test_post(self):
        post = Post.objects.create(title="Hello World")
        print "Title before request:", post.title
        resp = self.client.get('/')
        print "From view:", resp.content
        print "Title after request:", post.title


Однако, все изменения модели внутри view не сохраняются и после завершения запроса мы получаем то же значение title, которое было до вызова запроса, не смотря на все изменения внутри вызываемой view:
➜  djangotests  ./manage.py test
Creating test database for alias 'default'...
Title before request: Hello World
From view: Second post
Title after request: Hello World


Скачать код можно здесь: https://www.dropbox.com/s/k149ud6cmhfx1qh/djangote...

Я подозреваю, что это поведение правильное и я просто что-то недопонимаю в концепции юнит-тестов, но как же тогда добиться такого поведения, которое мне требуется?
  • Вопрос задан
  • 2728 просмотров
Пригласить эксперта
Ответы на вопрос 1
@doktorevil
После resp = self.client.get('/')
вставьте
post.refresh_from_db()
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы