Skip to main content
Join the official 2019 Python Developers SurveyStart the survey!

Easier to use fakeredis in Django.

Project description

CircleCI

Easier use fakeredis in Django.

Install

pip install django-fakeredis

Why use it?

I have experienced many times to find bugs which is caused by mutiple fakeredis instances in tests. We just want to use fakerredis like redis with one redis-server and different connections and can debug with MONITOR command in redis

Features:

  • One fakeredis server with mutiple connections for tests like the way of using redis.
  • Combine override settings to Local-memory and fake get_redis_connection, django's cache
  • To disable the fake action with passing env: "NOFAKE_REDIS=1" NOFAKE_REDIS=1 python manage.py test

Before you use django_fakeredis, your tests code maybe like that:

server = fakeredis.FakeServer()
@override_settings(CACHES={"default": {"BACKEND": "django.core.cache.backends.dummy.DummyCache" }})
@patch('foo.get_redis_connection', fakeredis.FakeRedis(server=server)
def test_sth():
    ....

Now your can just:

@FakeRedis("yourpath.get_redis_connection")
def test_sth():
    ...

Usage

from django_fakeredis import FakeRedis
@FakeRedis("yourpath.get_redis_connection")
def test_foo():
    ...
from django_fakeredis import FakeRedis
with FakeRedis("yourpath.get_redis_connection"):
    foo()
from django_fakeredis import FakeRedis
with FakeRedis("yourpath.cache"):
    foo()

NOTE

  1. If you want to mock django.core.cache.cache with fakeredis, django-fakeredis do nothing but just override CACHE settings into Local-Memory for using the internal cast. So there are two mocked redis instance for django.cache and get_redis_connection .

If you want to use more redis commands, such as: sets, list..., you may need use django_redis, and cast the result by hand.

django.cache:

from django.core.cache import cache
cache.set("key", 2)
assert cache.get("key") == 2

you have to cast by hand, when using fakeredis or django_redis directly, you have to cast by hand:

import fakeredis
con = fakeredis.FakeStrictRedis()
con.set("key", 2)
assert con.get("key").decode('utf8') == "2"
  1. if you have a problem that mock is not worked, you may should to see where to patch

Project details


Download files

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

Files for django-fakeredis, version 0.1.1
Filename, size File type Python version Upload date Hashes
Filename, size django_fakeredis-0.1.1-py3-none-any.whl (4.6 kB) File type Wheel Python version py3 Upload date Hashes View hashes
Filename, size django-fakeredis-0.1.1.tar.gz (3.6 kB) File type Source Python version None Upload date Hashes View hashes

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page