问题标签 [freezegun]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 如何冻结时间并断言模板中的时间戳?
p1/urls.py
:
p1/views.py
:
p1/templates/p1/t1.html
:
p1/settings.py
:
p1/tests.py
:
然后,
我究竟做错了什么?添加tz_offset
到freeze_time
没有帮助。
python - how to use freezegun on logbook
I'm trying to run tests that involve mocking datetime within logbook (for logic around logbook.TimedRotatingFileHandler
). But freezegun doesn't reach logbook. Logs print as the current (un-mocked, correct) current time!
my example prints the confusing message
for the following pytest
python - 时间冻结不适用于熊猫时间戳
我至少从 2015 年就注意到了这种行为,并且从那以后就没有改变过。当 freezegun (或 pytest-freezegun) 用于在测试中冻结时间时,datetime.datetime.now()
返回冻结值 whilepd.Timestamp('now')
和pd.to_datetime('now')
do not。有没有解决的办法?
python - 为什么 datetime.utcnow 的行为不像我对 freezegun 的预期那样?
我注意到一些我不明白的东西,我想知道是否有人可以阐明它。
简而言之:如果
x = datetime.datetime.utcnow
和
y = lambda: datetime.datetime.utcnow()
我希望x()
并且y()
总是表现得一样。但是,当 freezegun 参与时,显然情况并非如此 - 它冻结y
但不是x
,我想知道为什么。(无论如何,如果x
和y
是在 freezegun 上下文之外定义的,则这是正确的;在这样的上下文中,它们的行为似乎是相同的。)
例子:
结果:
这Time from x
是运行时的时间,即它不受 freezegun 的控制。
任何人都可以对此有所了解吗?这只是 freezegun 的一些奇怪之处,或者当我假设x
并且y
应该始终等价时,我是否误解了关于 python 的更基本的东西?我看到这utcnow
是一个绑定的类方法,但我不明白为什么这会暗示这种行为。
后记:time.time
不这样做
查看utcnow()
's source它基本上只是一个包装器-time.time()
但不要以这种方式发散...所以我猜这确实与绑定类方法有关-但我不知道是什么。time.time
lambda: time.time()
utcnow()
给出:
游戏中的版本
python - 为什么 FreezeGun 不能使用 SQLAlchemy 默认值?
我使用以下模型创建了一个 SQLAlchemy 应用程序:
我创建了这个迁移文件来配合它:
现在我有这个使用Freezegun的单元测试用例:
此测试用例产生以下输出:
为什么是m.created
当前挂钟时间而不是 FreezeGun 时间?两者应该是一样的。
根据this answer,Freezegun补丁datetime.datetime.now()
。我的测试用例证实了这一点。那么为什么/如何将不同的值存储在数据库中?
python - freeze_time `ignore` 似乎不适用于更复杂的设置(Django + S3 / boto)
我使用带有 S3 的 Django 作为文件存储(使用 boto3/botocore 库)。我有一个创建一些 Django 实例的“管理”命令——我使用 freezegun,所以这些实例似乎是在过去创建的。但是,其中一些模型包含正在保存到 S3 的文件 - 这会引发一些异常:
这是由于botocore.auth
模块中的一些身份验证代码检查时间差异。我尝试使用ignore
参数 ( freeze_time(datetime_in_past, ignore=['botocore'])
) 来解决这个问题,但它没有帮助,botocore.auth
仍然使用FakeDatetime
(我使用带有断点的调试器来查明问题)。
我试图用一个简单的可重现的例子来重现这个问题,所以我想出了以下内容:
此代码正常工作, freeze_time 忽略test_time
并打印real datetime.now: <real time>
. 但是,如果我忽略了标记为未使用的导入test.py
,它就不起作用 - freeze_time 不是ignore
模块并且脚本会打印出来real datetime.now: <fake time>
。
我想我可以在我真正的 Django go 中尝试类似的东西,所以我做了以下操作:
无论我导入或忽略什么,这都不起作用,botocore.auth
仍然继续使用FakeDatetime
......是否有错误freezegun
?还是我以某种方式滥用图书馆?为什么它会这样?
只是为了澄清-我不关心使用时间偏移设置的文件。它们可以在 S3 中实时设置。我只关心用冻结时间保存的模型。所以如果我有以下模型:
字段date_created
将使用冻结时间。
python - Python Dataclasses:在冻结的 Dataclass 中模拟默认工厂
我试图在我的单元测试中使用 freezegun 来修补数据类中的字段,该字段设置为对象初始化时的当前日期。我想这个问题与任何尝试修补一个在 freezegun 之外用作 default_factory 的函数有关。数据类被冻结,因此它是不可变的。
例如,如果我的数据类是:
当我用 freezegun 修补 datetime 时,它对 MyClass 中时间戳的初始化没有影响(它仍然将时间戳设置为单元测试中 now() 返回的当前日期,导致测试失败)。
我假设它与在补丁到位之前加载默认工厂和模块有关。我尝试修补日期时间,然后使用 importlib.reload 重新加载模块但没有运气。
我目前的解决方案是:
哪个有效。
不过,理想情况下,我想要一个非侵入性的解决方案,它不需要我更改生产代码来启用我的单元测试。
python - 当使用变量引用时间时,冻结时间测试用例失败
我freeze-time
用来运行我的 pythonunittest
测试用例。
一个虚拟测试用例:
主要代码/正在测试的代码:
这是失败的,因为输出给出的是 current_date 而不是冻结日期。当它是一个 lambda 时它正在工作GET_CURRENT_TIME
,但这会导致我的代码的时间戳不同,这是我不想要的。
如果需要任何其他信息,请随时发表评论。谢谢
python - Freezegun 不适用于 django orm create_at 字段
我正在尝试使用 freezegun 进行单元测试:
因此,出于某种原因,冻结时间似乎不适用于 django orm。我无法Customer.objects.create(created_at=...)
在我试图测试的功能中做。
如何使用 freezegun正确设置created_at时间?
提前谢谢了。
python - freeze_time 在调用的函数中不起作用
我的代码遵循上述结构。有了这个,如果我 test_dummy_function
单独执行,dummy_function 将返回 2021-01-01 并且测试用例通过。但是,当我将它与项目中的所有其他测试用例一起运行时,它失败了。内容也不依赖。