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

Node.js中用Jest与sentry-testkit做单元测试时遇'sentry'未定义错误

解决Jest + sentry-testkit测试时的TypeError问题

错误原因分析

出现TypeError: Cannot read properties of undefined (reading 'sentry')通常是因为sentry-testkit与@Sentry/node版本不兼容,或者Sentry初始化、测试逻辑存在疏漏。

修复步骤

1. 确保依赖版本兼容

首先检查package.json中的依赖版本:

  • 若使用@sentry/node v7.x及以上版本,需将sentry-testkit升级至v5.x及以上的稳定版
  • 执行命令更新依赖:
npm install sentry-testkit@latest @sentry/node@latest --save-dev

2. 修正测试代码逻辑

你的测试代码存在两个核心问题:未实际触发错误供Sentry捕获,初始化逻辑未贴合测试场景。修改后的代码如下:

import { describe, expect, it, beforeAll, afterEach } from '@jest/globals';
import * as Sentry from '@sentry/node';
import sentryTestKit from 'sentry-testkit';

const { testkit, sentryTransport } = sentryTestKit();

// 测试前统一初始化Sentry
beforeAll(() => {
  Sentry.init({
    dsn: 'fake-dsn', // 测试环境无需真实DSN
    transport: sentryTransport,
    enabled: true,
  });
});

// 每个测试用例后重置testkit,避免数据污染
afterEach(() => {
  testkit.reset();
});

describe('Sentry Test', () => {
  describe('Error Capture', () => {
    it('should catch thrown errors', () => {
      // 主动触发一个错误,让Sentry捕获
      const testError = new Error('Test Sentry Error');
      Sentry.captureException(testError);

      // 验证捕获到的错误数量
      expect(testkit.reports()).toHaveLength(1);
      // 可选:验证错误内容是否匹配
      expect(testkit.reports()[0].exception.values[0].value).toBe('Test Sentry Error');
    });
  });
});

3. 排查其他潜在问题

  • 确保jest.config.js中未禁用ES模块支持,避免混合使用CommonJS与ES模块导入方式
  • 不要在测试文件中多次初始化Sentry,统一放在beforeAll钩子中执行

内容的提问来源于stack exchange,提问作者Luka Martins

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 01:57:49