python - Django 测试集 created_at 字段
问题描述
我在 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_at
和的正确方法是什么updated_at
?
解决方案
最简单的方法是使用 .update() ,因为它会执行不会调用任何 Django 方法的 UPDATE SQL 语句
session = Session.objects.create(session_token='', ...).
session.filter(pk=session.pk).update(updated_at=older_date_time,..)
其他想法是固定装置或模拟
推荐阅读
- optimization - 解读 Gurobi 的 LP 优化结果
- c++ - 定向光不照亮表面
- ios - 如何在持续集成中检测对 iOS 的 64 位构建支持?
- python - 了解如果
- 做?
- react-native - react native app ios 文件夹中的 pod install 未检测到我的 npm 包的依赖项
- angular - Angular/webpack 不在 @spartacus/storefront 中寻找 .d.ts 文件
- node.js - 在 Nodejs 中加密/解密 aes256cbc
- javascript - 在 Phaser 3 中传送到不同的 scipt
- core-data - SwiftUI:按核心数据属性分组和求和
- excel - IF/MATCH 语句在 Excel 上被视为 FALSE