gpt4 book ai didi

node.js - 无法连接到 fakeredis 实例(Nodejs + Redis + Fakeredis)

转载 作者:可可西里 更新时间:2023-11-01 11:37:06 24 4
gpt4 key购买 nike

我用 redis 编写 nodejs 应用程序。我想在单元测试中模拟我的 redis 连接。我使用 fakeredis 模块来 stub 我的数据。但是我在获取测试中创建的 redis key 时遇到了问题。我可以在测试中获取所有 key ,但它们在代码中不可用。

好像我的代码没有连接到 fakeredis 实例。我尝试设置端口和主机,还尝试了另一个模块 redis-mock。

应用:

var redis = require('redis');
var redisClient = redis.createClient(6379, '127.0.0.1', {});

redisClient.keys('*', function(error, reply){
console.log('KEYS', reply); // Problem: it's empty array
});

规范:

var assert    = require('chai').assert;
var fakeredis = require('fakeredis');
var fakeredisClient;

before(function() {
fakeredisClient = fakeredis.createClient();
});

beforeEach(function() {

// Mock data - Set random keys
fakeredisClient.set('FOO', 'BAR');

});

afterEach(function(done){
fakeredisClient.flushdb(function(err, reply){
assert.ok(reply);
done();
});
});

最佳答案

您上面的代码中有几处不正确。

首先,您需要模拟您的 fakeredis 模块,以代替应用程序代码中的 redis 模块。一种方法是使用 mockery 库。

下一个问题是测试中的 fakeredis.createClient(...) 调用必须匹配应用程序中的 redis.createClient(...) 调用代码。这意味着您需要将相同的配置变量读入您的测试。另一种选择是使用 sinon 重载 fakeredis.createClient() 函数以始终返回我们的测试 client

var mockery = require('mockery')
, fakeredis = require('fakeredis')

/* This should exactly match the app connection settings
if you aren't stubbing the createClient() method using
sinon. */
, client = fakeredis.createClient('test')

/* If your connection settings aren't an exact match (or
use the defaults via an empty constructor, you need to
stub using sinon */
, sinon = require('sinon')

// run before the tests start
before(function() {

// Enable mockery to mock objects
mockery.enable({
warnOnUnregistered: false
});

// Stub the createClient method to *always* return the client created above
sinon.stub(fakeredis, 'createClient', function(){ return client; } );

// Override the redis module with our fakeredis instance
mockery.registerMock('redis', fakeredis);
}

// run after each test
afterEach(function(){
client.flushdb();
});

关于node.js - 无法连接到 fakeredis 实例(Nodejs + Redis + Fakeredis),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31490071/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com