【问题标题】:Can't test changes to the database through Django Test无法通过 Django Test 测试对数据库的更改
【发布时间】:2014-12-07 16:59:39
【问题描述】:

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

def test_vote(self):
    self.set_up() 
    idea = Idea.objects.get(title="Hello people")
    c = Client()
    c.login(email="xxxxx@case.edu", 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)

该视图假设对一个想法对象进行投票,这是一个简单的视图。

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 这是我想要得到的。我不确定我是否只是要测试这一切都是错误的还是什么。任何帮助都会非常感谢。

【问题讨论】:

    标签: django database testing


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-12-24
      • 2016-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-19
      • 1970-01-01
      相关资源
      最近更新 更多