Fast-forward time in asyncio Python by patching loop.time, loop.call_later, loop.call_at, and asyncio.sleep
Project description
aiofastfoward
Fast-forward time in asyncio Python by patching loop.call_later, loop.call_at, loop.time, and asyncio.sleep. This allows you to test asynchronous code synchronously.
Inspired by AngularJS $timeout.$flush.
Usage
Patching is done through a context manager, similar to unittest.patch.
import asyncio
import aiofastfoward
loop = asyncio.get_event_loop()
with aiofastfoward.FastForward(loop) as forward:
# Call production function(s)
# ...
# Fast-forward time 1 second.
await forward(1)
# More production functions or assertions
# ...
asyncio.sleep
# Production code
async def sleeper(callback):
await asyncio.sleep(1)
await asyncio.sleep(2)
callback(0)
# Test code
loop = asyncio.get_event_loop()
callback = Mock()
with aiofastforward.FastForward(loop) as forward:
asyncio.ensure_future(sleeper())
await forward(3)
self.assertEqual(callback.mock_calls, [call(0)])
loop.call_later
# Production code
async def schedule_callback(loop, callback):
loop.call_later(1, callback, 0)
loop.call_later(2, callback, 1)
# Test code
from unittest.mock import Mock, call
loop = asyncio.get_event_loop()
with aiofastfoward.FastForward(loop) as forward:
callback = Mock()
await schedule_callback(loop, callback)
await forward(1)
self.assertEqual(callback.mock_calls, [call(0)])
await forward(1)
self.assertEqual(callback.mock_calls, [call(0), call(1)])
loop.call_at
# Production code
async def schedule_callback(loop, callback):
now = loop.time()
loop.call_at(now + 1, callback, 0)
loop.call_at(now + 2, callback, 1)
# Test code
from unittest.mock import Mock, call
loop = asyncio.get_event_loop()
with aiofastfoward.FastForward(loop) as forward:
callback = Mock()
await schedule_callback(loop, callback)
await forward(1)
self.assertEqual(callback.mock_calls, [call(0)])
await forward(1)
self.assertEqual(callback.mock_calls, [call(0), call(1)])
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
aiofastforward-0.0.2.tar.gz
(2.6 kB
view hashes)
Built Distribution
Close
Hashes for aiofastforward-0.0.2-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f4f72dad869078dde654096ce508fda1da322e01423a0281a086914235f08075 |
|
MD5 | 3f1909b56413cfe7dff1f787b26cd632 |
|
BLAKE2b-256 | 9a2442d8becdd478e4a2e1a592f2ff71f6b784972549c7aa69d8a44f4ed2135b |