如何使用Jest模拟Node-Redis

9

我正在使用jest并尝试使用node-redis进行模拟,使用redis-mock

// redis.js

const redis = require("redis");
const client = redis.createClient({ host: '127.0.0.1', port: 6379 });

// redis.test.js

const redisMock = require("redis-mock");

describe("redis", () => {
  jest.doMock("redis", () => jest.fn(() => redisMock));
  const redis = require("./redis");
});

当我运行测试时,出现错误。

类型错误:redis.createClient不是一个函数。

感觉在使用jest.doMock()时出了问题。
希望您的帮助。
2个回答

12
如果你正在使用jest,那么模拟和实际实现的切换可以自动完成。这对于CI非常有效。

jest.config.js

module.exports = {
    // other properties...
    setupFilesAfterEnv: ['./jest.setup.redis-mock.js'],
};

jest.setup.redis-mock.js

jest.mock('redis', () => jest.requireActual('redis-mock'));

1
这个是否有效?请给我一个示例代码。 - UWU_SANDUN

12

以下方法适用于我:

import redis from 'redis-mock'
jest.mock('redis', () => redis)

我在测试中没有包含redis库,但只在包含被测试类的文件中使用它。(当然,被测试的文件会被包括在测试文件中。)


4
可以给我一个代码示例吗? - UWU_SANDUN
@UWU_SANDUN,你拿到示例代码了吗? - Arif Ikhsanudin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接