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

如何在非测试环境(独立Web应用)中使用Jest Mock?

在非测试环境模拟外部模块的可行方案

方案一:绕过Jest环境检查(不推荐,风险高)

Jest的@jest/globals内置了环境校验逻辑,要强行绕过可以先伪造Jest环境变量,再导入:

  • 先设置环境变量:
process.env.JEST_WORKER_ID = '1'; // 模拟Jest工作进程标识
  • 再导入jest对象:
import { jest } from '@jest/globals';

⚠️ 注意:这种方法依赖Jest内部实现,版本更新大概率会失效,还会把Jest的冗余代码带进生产环境,只适合临时调试,别用于正式应用。

方案二:让应用运行在Jest测试环境中

如果只是需要临时在带mock能力的环境里跑应用,可以把应用入口改成Jest测试文件的形式:

  1. 创建测试文件run-app.test.js:
import { jest } from '@jest/globals';
// 模拟目标外部模块
jest.mock('external-module', () => ({
  targetFunction: () => true
}));
// 导入并启动应用
import './your-app-entry';
  1. 用Jest执行这个文件:
jest run-app.test.js --runInBand

这样应用就会在Jest环境中启动,所有mock规则都会生效。

方案三:用非测试场景的模块模拟工具(推荐)

Jest是为测试设计的,非测试场景更适合用专门的模块拦截工具,分场景推荐:

Node.js环境可选工具

  • proxyquire:无需修改源码,直接替换依赖模块
const proxyquire = require('proxyquire');
// 替换external-module的targetFunction
const app = proxyquire('./app', {
  'external-module': {
    targetFunction: () => true
  }
});
// 启动应用
app.start();
  • rewire:可以修改模块的私有变量和导出内容
const rewire = require('rewire');
const app = rewire('./app');
// 替换导入的targetFunction
app.__set__('targetFunction', () => true);
// 启动应用
app.start();
  • mock-require:轻量模块mock工具,操作简单
const mockRequire = require('mock-require');
// 模拟目标模块
mockRequire('external-module', {
  targetFunction: () => true
});
// 必须在mock之后导入应用
const app = require('./app');
app.start();

前端Webpack构建场景

用Webpack的NormalModuleReplacementPlugin替换模块:

  1. 在webpack.config.js中添加插件配置:
const webpack = require('webpack');
const path = require('path');

module.exports = {
  // ...其他Webpack配置
  plugins: [
    new webpack.NormalModuleReplacementPlugin(
      /external-module/, // 匹配要替换的模块
      path.resolve(__dirname, './mocked-module.js') // 替换为自定义mock文件
    )
  ]
};
  1. 创建mocked-module.js:
export const targetFunction = () => true;

构建后的应用会自动使用这个mock模块。


内容的提问来源于stack exchange,提问作者Paul Hicks

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 03:15:08