【问题标题】:Django test set created_at fieldDjango 测试集 created_at 字段
【发布时间】:2020-08-27 13:23:44
【问题描述】:

我在 Django 中有以下模型 (models.py)

from django.db import models

# Create your models here.

class Session(models.Model):
  session_token = models.TextField(default="")
  code = models.CharField(max_length= 5, default="")
  active = models.BooleanField(default=False)
  created_at = models.DateTimeField(auto_now_add=True)
  updated_at = models.DateTimeField(auto_now=True)

现在,我有以下功能要测试。

def get_active_session_older_than_hours(older_than_hours):
  older_date_time = datetime.datetime.now() - datetime.timedelta(hours=older_than_hours)
  data = Session.objects\
    .filter(active=True, updated_at__lte=older_date_time)\
    .values_list('code')
  return data

我想测试一下。

from django.test import TestCase


#Working fine
class ActiveSessionsNotPreset(TestCase):
  def test(self):
    data = get_active_session_older_than_hours(3)
    self.assertEqual(len(data), 0)


#This is not working.
#It is not getting the result.
class ActiveSessionPresent(TestCase):
  def setUp(self):
    older_date_time = datetime.datetime.now() - datetime.timedelta(hours=4)
    Session.objects.create(session_token='',
                                     code='US', active=True,
                                     created_at=older_date_time,
                                     updated_at=older_date_time)
  def test(self):
    data = get_active_session_older_than_hours(3)
    print("DEVENDER data " + str(data))
    self.assertEqual(len(data), 1)

在第二个测试用例中,我没有得到任何结果。强制created_atupdated_at的正确方法是什么?

【问题讨论】:

  • 检查 freezegun 库,它允许您在测试中模拟日期和时间

标签: python django unit-testing


【解决方案1】:

最简单的方法是使用 .update(),因为它会执行不会调用任何 Django 方法的 UPDATE SQL 语句

session = Session.objects.create(session_token='', ...).
session.filter(pk=session.pk).update(updated_at=older_date_time,..)

其他想法是固定或模拟

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    • 2014-02-02
    • 2013-08-06
    • 2019-10-27
    相关资源
    最近更新 更多