我想在我的Django应用程序中模拟redis。我尝试了几种不同的方法,但似乎都没有。我做错了什么?
我的主要redis实例调用:
redis_client = redis.from_url(os.environ.get("REDIS_URL"))
该实例会在应用的其他部分导入,以便添加和检索数据。
在我的测试中,我尝试过:
import fakeredis
from mock import patch
class TestViews(TestCase):
def setUp(self):
redis_patcher = patch('redis.Redis', fakeredis.FakeRedis)
self.redis = redis_patcher.start()
self.redis.set('UPDATE', 'Spring')
print(redis_client.get('UPDATE'))
def tearDown(self):
self.redis_patcher.stop
运行测试时,我希望设置'UPDATE'变量。但相反,每个redis_client实例都说服务器不可用。我如何模拟redis并设置值,以便在测试我的应用程序时它们可用?
答案 0 :(得分:1)
你应该模仿一个使用它的项目,而不是来自它的地方。
所以如果在这样的视图中使用redis_client
:
<强>的myapp / views.py 强>
from somemodule import redis_client
def some_view_that_uses_redis(request):
result = redis_client(...)
然后在你的TestViews
中,您应该像这样修补redis_client
:
class TestViews(TestCase):
def setUp(self):
redis_patcher = patch('myapp.views.redis_client', fakeredis.FakeRedis)
self.redis = redis_patcher.start()
答案 1 :(得分:0)
首先,确保redis正在运行,在服务器insert_trade_sell = plpy.prepare("""
INSERT INTO trade_sell_tbl (account_name, trade_date, settlement_date, qty, symbol, price, fees, amount, dest_of_funds, note)
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)
RETURNING sell_id
""",
['text', 'date', 'date', 'numeric(9,4)', 'text', 'numeric(9,4)', 'numeric(9,2)', 'numeric(9,2)', 'text', 'text']
);
中执行以下命令。
然后,如果您的redis已经在运行,请查看配置文件并确保它具有以下配置,redis-server
或您需要允许连接的某个主机,您可以在编辑之后编辑redis.conf文件那,重新启动或重新加载redis服务。
如果您的应用在服务器redis之外运行,请确保在防火墙中打开redis服务器端口,默认端口为bind 0.0.0.0
。
某些时候,redis不允许与所有人建立联系,但是通过这些步骤,您可以更好地接触服务器。