You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jest模拟@gmx-io/sdk模块函数时,调用mockReturnValue提示“不是函数”的问题求助

Jest模拟@gmx-io/sdk模块函数时,调用mockReturnValue提示“不是函数”的问题求助

大家好,我最近在尝试用Jest模拟@gmx-io/sdk模块里的函数时碰到了棘手的问题,折腾了好一阵没搞定,来求助各位大佬!

我的需求是模拟@gmx-io/sdk/utils/fees/priceImpact.js里的getPriceImpactForPosition,以及@gmx-io/sdk/utils/numbers.js里的getBasisPoints这两个函数。按照常规的Jest mock写法我这么试了:

import { getPriceImpactForPosition } from "@gmx-io/sdk/utils/fees/priceImpact.js";
import { getBasisPoints } from "@gmx-io/sdk/utils/numbers.js";

// 把mock声明放在所有import前面
jest.mock("@gmx-io/sdk/utils/fees/priceImpact.js", () => ({
  getPriceImpactForPosition: jest.fn()
}));

jest.mock("@gmx-io/sdk/utils/numbers.js", () => ({
  getBasisPoints: jest.fn()
}));

但当我尝试调用getPriceImpactForPosition.mockReturnValue(xxx)或者getBasisPoints.mockReturnValue(xxx)的时候,控制台直接提示我这两个变量不是函数。我猜应该是mock根本没生效,代码还在调用原模块的真实实现。

下面是我的jest.config.js完整配置:

/** @type {import('ts-jest').JestConfigWithTsJest} **/
export default {
  preset: "ts-jest/presets/js-with-ts-esm",
  testEnvironment: "node",
  testPathIgnorePatterns: ["/node_modules/", "/dist/"],
  transformIgnorePatterns: ["node_modules/(?!(@gmx-io/sdk))"],
  extensionsToTreatAsEsm: [".ts", ".jsx"],
  transform: {
    "^.+\\.(ts|js|mjs)$": ["ts-jest", {
      useESM: true,
      tsconfig: "tsconfig.json",
    }],
  },
  moduleNameMapper: {
    "^(\\.{1,2}/.*)\\.js$": "$1"
  }
};

我还特意看了@gmx-io/sdk包的package.json里的exports配置,会不会是这个结构影响了Jest的mock识别?

"exports": {
    ".": {
      "import": "./build/src/index.js",
      "require": "./build/src/index.js"
    },
    "./abis/*": "./build/abis/*",
    "./prebuilt/*": "./build/prebuilt/*",
    "./utils/*": "./build/src/utils/*",
    "./types/*": "./build/src/types/*",
    "./configs/*": "./build/src/configs/*"
  },

最后说下我运行测试的命令:

NODE_OPTIONS=--experimental-vm-modules jest --passWithNoTests

有没有大佬碰到过类似的情况?麻烦帮忙看看问题出在哪,怎么才能正确mock这两个函数呀?

备注:内容来源于stack exchange,提问作者DorkMonstuh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 09:40:28