首页 > 解决方案 > Jest ioredis mock - 将模拟绑定到模块

问题描述

在打字稿中,我有以下 IoRedis 实例。

import IoRedis from "ioredis";

const redis = new IoRedis({
    ...
});

在测试类中以以下方式模拟时。决定一起去ioredis-mock,解决这个问题。

var IoRedis = require('ioredis-mock');
var ioRedis = new IoRedis({
    data: {
        ...
    },
});
jest.mock('ioredis', ioRedis);

这会导致错误。

TypeError: this._mockFactories.get(...) is not a function

我尝试了对 mock 的替代调用ioredis,但是很难将 mock 的测试版本绑定到我的代码中正在解析的那个。主要是我认为new IoRedis是罪魁祸首,但我的javascript经验不足以知道模拟导入/要求后跟new关键字的方式。

标签: javascriptunit-testingjestjsioredis

解决方案


基于es-6-class-mocks,我找到了一种可行的方法,在类上模拟构造函数。

var IoRedis = require('ioredis-mock');
var ioRedis = new IoRedis({
    data: {
        cacheKey: cacheData
    },
});
jest.mock('ioredis', () => {
    return function () {
        return ioRedis
    };
});

此代码段可用于模拟ioredis,我无法在文档或 Stackoverflow 中在线找到。


推荐阅读