问题标签 [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.

0 投票
1 回答
4262 浏览

python - 如何冻结时间并断言模板中的时间戳?

p1/urls.py

p1/views.py

p1/templates/p1/t1.html

p1/settings.py

p1/tests.py

然后,

我究竟做错了什么?添加tz_offsetfreeze_time没有帮助。

0 投票
1 回答
238 浏览

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

0 投票
0 回答
241 浏览

python - 时间冻结不适用于熊猫时间戳

我至少从 2015 年就注意到了这种行为,并且从那以后就没有改变过。当 freezegun (或 pytest-freezegun) 用于在测试中冻结时间时,datetime.datetime.now()返回冻结值 whilepd.Timestamp('now')pd.to_datetime('now')do not。有没有解决的办法?

例如:https ://pypi.org/project/pytest-freezegun/

0 投票
1 回答
199 浏览

python - 为什么 datetime.utcnow 的行为不像我对 freezegun 的预期那样?

我注意到一些我不明白的东西,我想知道是否有人可以阐明它。

简而言之:如果

  • x = datetime.datetime.utcnow

  • y = lambda: datetime.datetime.utcnow()

我希望x()并且y()总是表现得一样。但是,当 freezegun 参与时,显然情况并非如此 - 它冻结y但不是x,我想知道为什么。(无论如何,如果xy是在 freezegun 上下文之外定义的,则这是正确的;在这样的上下文中,它们的行为似乎是相同的。)

例子:

结果:

Time from x是运行时的时间,即它不受 freezegun 的控制。

任何人都可以对此有所了解吗?这只是 freezegun 的一些奇怪之处,或者当我假设x并且y应该始终等价时,我是否误解了关于 python 的更基本的东西?我看到这utcnow是一个绑定的类方法,但我不明白为什么这会暗示这种行为。


后记:time.time不这样做

查看utcnow()'s source它基本上只是一个包装器-time.time()不要以这种方式发散...所以我猜这确实与绑定类方法有关-但我不知道是什么。time.timelambda: time.time() utcnow()

给出:


游戏中的版本

0 投票
1 回答
624 浏览

python - 为什么 FreezeGun 不能使用 SQLAlchemy 默认值?

我使用以下模型创建了一个 SQLAlchemy 应用程序:

我创建了这个迁移文件来配合它:

现在我有这个使用Freezegun的单元测试用例:

此测试用例产生以下输出:

为什么是m.created当前挂钟时间而不是 FreezeGun 时间?两者应该是一样的。

根据this answer,Freezegun补丁datetime.datetime.now()。我的测试用例证实了这一点。那么为什么/如何将不同的值存储在数据库中?

0 投票
0 回答
270 浏览

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将使用冻结时间。

0 投票
1 回答
2835 浏览

python - Python Dataclasses:在冻结的 Dataclass 中模拟默认工厂

我试图在我的单元测试中使用 freezegun 来修补数据类中的字段,该字段设置为对象初始化时的当前日期。我想这个问题与任何尝试修补一个在 freezegun 之外用作 default_factory 的函数有关。数据类被冻结,因此它是不可变的。

例如,如果我的数据类是:

当我用 freezegun 修补 datetime 时,它​​对 MyClass 中时间戳的初始化没有影响(它仍然将时间戳设置为单元测试中 now() 返回的当前日期,导致测试失败)。

我假设它与在补丁到位之前加载默认工厂和模块有关。我尝试修补日期时间,然后使用 importlib.reload 重新加载模块但没有运气。

我目前的解决方案是:

哪个有效。

不过,理想情况下,我想要一个非侵入性的解决方案,它不需要我更改生产代码来启用我的单元测试。

0 投票
1 回答
128 浏览

python - 当使用变量引用时间时,冻结时间测试用例失败

freeze-time用来运行我的 pythonunittest测试用例。

一个虚拟测试用例:

主要代码/正在测试的代码:

这是失败的,因为输出给出的是 current_date 而不是冻结日期。当它是一个 lambda 时它正在工作GET_CURRENT_TIME,但这会导致我的代码的时间戳不同,这是我不想要的。

如果需要任何其他信息,请随时发表评论。谢谢

0 投票
1 回答
166 浏览

python - Freezegun 不适用于 django orm create_at 字段

我正在尝试使用 freezegun 进行单元测试:

因此,出于某种原因,冻结时间似乎不适用于 django orm。我无法Customer.objects.create(created_at=...)在我试图测试的功能中做。

如何使用 freezegun正确设置created_at时间?

提前谢谢了。

0 投票
1 回答
271 浏览

python - freeze_time 在调用的函数中不起作用

我的代码遵循上述结构。有了这个,如果我 test_dummy_function单独执行,dummy_function 将返回 2021-01-01 并且测试用例通过。但是,当我将它与项目中的所有其他测试用例一起运行时,它失败了。内容也不依赖。