我有以下连接到redis数据库的文件:index.js
const redis = require('redis');
const logger = require('../logger');
const config = require('../env');
const client = redis.createClient({
host: config.redis.host,
port: config.redis.port
});
const connect = () => {
client.on('connect', () => {
logger.info(`Redis connected on port: ${client?.options?.port}`);
});
client.on('error', err => {
logger.error(`500 - Could not connect to Redis: ${err}`);
});
};
const close = () => {
client.quit();
};
module.exports = { connect, close, client };
以及包含一些redis功能的帮助文件:
const util = require('util');
const { client } = require('./index.js');
const set = ({ key, data, mode, expiresIn }) => {
client.set(key, data, mode, expiresIn);
};
const get = key => {
client.get = util.promisify(client.get);
return client.get(key);
};
const remove = key => {
client.del(key);
};
const getKeys = keyPattern => {
client.keys = util.promisify(client.keys);
return client.keys(keyPattern);
};
module.exports = { set, get, remove, getKeys };
现在我想用jest测试这些功能,我应该在mocks文件夹中模拟redis吗?或者只是为测试环境创建一个单独的数据库来测试功能?
1条答案
按热度按时间v8wbuo2f1#
我认为这可能是一个主观问题。首先,这取决于你想进行什么类型的测试。如果是单元测试,我会考虑模仿redis服务。一些开发人员将单元测试视为方法或功能级别,即方法就是要测试的单元。但什么是单位也可能是主观的。公开有限公共方法的服务类也可以被视为单元。如果您正在运行集成测试,我将强烈考虑使用实际的redis示例。在以前的角色中,我们使用docker compose启动所有服务依赖项来运行本地集成,但这同样取决于依赖项的复杂性。在我目前的角色中,集成测试是针对mock进行的。在我看来,这是一个会得到主观答案的问题。