Всем привет!
Пытаюсь написать тест для 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...
Я подозреваю, что это поведение правильное и я просто что-то недопонимаю в концепции юнит-тестов, но как же тогда добиться такого поведения, которое мне требуется?