2014-12-07 68 views
0

我正在尝试为我的第一个Django应用程序编写测试,并且当我浏览视图时,我似乎无法测试对数据库所做的更改。这是我的一个测试的例子。无法通过Django测试对数据库的更改测试

def test_vote(self): 
    self.set_up() 
    idea = Idea.objects.get(title="Hello people") 
    c = Client() 
    c.login(email="[email protected]", password="baxter") 
    r = c.post(reverse("ideas:up_vote", kwargs={'pk':idea.pk}), follow=True) 
    self.assertEqual(r.status_code, 200) 
    self.assertEqual(idea.votes, 1) 

该视图假设up_vote一个想法对象,这是一个简单的视图。

def like_view(request, **kwargs): 
    idea = Idea.objects.get(pk = kwargs['pk']) 
    idea.votes += 1 
    idea.save() 

    return HttpResponseRedirect(reverse('ideas:list')) 

我正在使用SQLite3数据库。

if DEBUG: 
    DATABASES = { 
     'default': { 
      'ENGINE': 'django.db.backends.sqlite3', 
      'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 
     } 
    } 
else: 
    DATABASES = { 
     'default': { 
      'ENGINE': 'django.db.backends.postgresql_psycopg2', 
       'NAME': 'django', 
       'USER': env('RDS_USERNAME'), 
       'PASSWORD': env('RDS_PASSWORD'), 
       'HOST': env('RDS_HOST'), 
       'PORT': '5432', 
     } 
     } 

DEBUG = True也。每次我运行测试时都没有提到idea.votes = 0而不是1,这就是我想要得到的结果。我不确定我是否正在测试这一切都是错误的还是什么。任何帮助将非常感谢。

回答

1

您需要在调用视图后刷新测试方法中的投票实例。

idea = Idea.objects.get(pk=idea.pk) 
self.assertEqual(idea.votes, 1)