In some of my tests I am having a problem that they fail on Travis because of time and time zone problems, so I want to mock system time for my test. How can I do this?
AFAIK, you can't mock builtin methods.
One approach I have often done is to change my code a bit to not use datetime
directly to obtain the date, but a wrapper function somewhere:
# mymodule.py
def get_today():
return datetime.date.today()
This makes it trivial to just mock
it in your test:
def test_something():
with mock.patch('mymodule.get_today', return_value=datetime.date(2014, 6, 2)):
...
You can also use the freezegun module.
@Brian-Kruger's answer is the best one. I've voted to undelete it. In the meantime...
Use freezegun (repo).
From the README:
from freezegun import freeze_time
@freeze_time("2012-01-14")
def test():
assert datetime.datetime.now() == datetime.datetime(2012, 1, 14)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With