【问题标题】:Testing Redis functionalities with Jest使用 Jest 测试 Redis 功能
【发布时间】:2020-11-24 14:29:22
【问题描述】:

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

【问题讨论】:

    标签: javascript node.js unit-testing redis jestjs


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      正如 jeeves 所说,我同意它的主观性。我正在为我的 redis 服务编写 Jest 测试,但是从动作来看 - 所以我正在检查我的动作是否从模拟 redis 获取和设置。

      明确地在您上面的代码中几乎没有发生逻辑,所以我建议不需要测试 - 否则您将非常接近测试 promisify / redis 本身是否正常工作,我们需要假设他们的代码没问题。

      【讨论】:

        猜你喜欢
        • 2019-04-24
        • 2021-05-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-24
        • 2020-08-29
        • 2019-07-09
        • 2019-06-16
        相关资源
        最近更新 更多