jest.mock找不到模块



我有一个函数,它使用mysql连接进行查询,我正在尝试对这个函数进行单元测试,为此我需要模拟mysql。然而,当我使用jest.mock函数模拟mysql连接时,它会返回以下错误。

无法从中找到模块"MySQLReplica"'src/api/leaderboard/ranks/popularity.test.ts'

受欢迎程度测试.ts

import { MySQLReplica } from "@services/mysql.service";
import { IEntityLeaderboardQuery } from "./../leaderboard.interface";
import { PopularityRank } from "./popularity";
import { mocked } from "ts-jest/utils";
jest.mock("MySQLReplica");
describe("Leaderboard - Rank - Popularity", () => {
afterAll(() => {
MySQLReplica.end();
});
const mockedMySQLReplica = mocked(MySQLReplica, true);
it("should get popularity scores", async () => {
const query: IEntityLeaderboardQuery = {
top: "10",
entity_types: ["person"],
region: "Europe",
country: "Germany",
end_date: "2021-06-15",
start_date: "2021-06-01",
rank: "popularity",
};
const result = await PopularityRank(query);
console.log(result);
});
});

services/mysql.service.ts

import mysql from "mysql2/promise";
import { Config } from "@config";
export const MySQLReplica = mysql.createPool({
host: Config.db.replica.host,
database: Config.db.replica.database,
user: Config.db.replica.username,
password: Config.db.replica.password,
waitForConnections: true,
connectionLimit: 500,
queueLimit: 0,
});
export const MySQLWrite = mysql.createPool({
host: Config.db.write.host,
database: Config.db.write.database,
user: Config.db.write.username,
password: Config.db.write.password,
waitForConnections: true,
connectionLimit: 100,
queueLimit: 0,
});
export const MySQLPreparedStatement = mysql.format;

jest.mock()中的moduleName参数是一个路径。

请参阅此处的官方文档。

例如:

import moduleName, {foo} from '../moduleName';
jest.mock('../moduleName', () => {
return {
__esModule: true,
default: jest.fn(() => 42),
foo: jest.fn(() => 43),
};
});
moduleName(); // Will return 42
foo(); // Will return 43

所以在你的情况下,它会是:

import { MySQLReplica } from "@services/mysql.service";
jest.mock("@services/mysql.service");

最新更新