用jest测试redis功能

vm0i2vca  于 2021-06-09  发布在  Redis
关注(0)|答案(1)|浏览(481)

我有以下连接到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吗?或者只是为测试环境创建一个单独的数据库来测试功能?

v8wbuo2f

v8wbuo2f1#

我认为这可能是一个主观问题。首先,这取决于你想进行什么类型的测试。如果是单元测试,我会考虑模仿redis服务。一些开发人员将单元测试视为方法或功能级别,即方法就是要测试的单元。但什么是单位也可能是主观的。公开有限公共方法的服务类也可以被视为单元。如果您正在运行集成测试,我将强烈考虑使用实际的redis示例。在以前的角色中,我们使用docker compose启动所有服务依赖项来运行本地集成,但这同样取决于依赖项的复杂性。在我目前的角色中,集成测试是针对mock进行的。在我看来,这是一个会得到主观答案的问题。

相关问题