Skip to main content

Fake the time.sleep/asyncio.sleep function during tests.

Project description

⏰ SleepFake

Version versions license

SleepFake is a compact Python package (under 100 lines) that provides a context manager to simulate the time.sleep and asyncio.sleep functions during tests. This is useful for testing time-dependent code without the need to actually wait for time to pass. The real magic behind this package comes from freezegun. 🎩✨

Installation

pip install sleepfake

🚀 Usage

Context Manager

import asyncio
import time

from sleepfake import SleepFake


def test_example():
    real_start = time.time()
    with SleepFake():
        start = time.time()
        time.sleep(10)
        end = time.time()
        assert end - start == 10
    real_end = time.time()
    assert real_end - real_start < 1

@pytest.mark.asyncio
async def test_async_example():
    real_start = asyncio.get_event_loop().time()
    with SleepFake():
        start = asyncio.get_event_loop().time()
        await asyncio.gather(asyncio.sleep(5), asyncio.sleep(5), asyncio.sleep(5))
        end = asyncio.get_event_loop().time()
        assert end - start <= 5.5  # almost 5 seconds  # noqa: PLR2004
        assert end - start >= 5  # almost 5 seconds  # noqa: PLR2004
    real_end = asyncio.get_event_loop().time()
    assert real_end - real_start < 1  # almost 0 seconds

With Fixture (Beta)

import asyncio
import time

from sleepfake import SleepFake

def test_example(sleepfake: SleepFake):
    start = time.time()
    time.sleep(10)
    end = time.time()
    assert end - start == 10

@pytest.mark.asyncio
async def test_async_example(sleepfake: SleepFake):
    start = asyncio.get_event_loop().time()
    await asyncio.gather(asyncio.sleep(5), asyncio.sleep(5), asyncio.sleep(5))
    end = asyncio.get_event_loop().time()
    assert end - start <= 5.5  # almost 5 seconds  # noqa: PLR2004
    assert end - start >= 5  # almost 5 seconds  # noqa: PLR2004

Local Development

Prerequisites

Install rye

curl -sSf https://rye-up.com/get | bash

Install dep

rye sync

Run tests

rye run test

Run linter

rye run lint

Acknowledgments 🙏

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sleepfake-1.0.3.tar.gz (7.0 kB view hashes)

Uploaded Source

Built Distribution

sleepfake-1.0.3-py3-none-any.whl (4.7 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page