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

NX Monorepo中Jest正确Mock Firebase-Admin的问题排查

NX Monorepo 中 Jest Mock Firebase-Auth 失败的排查与解决方案

常见问题排查

1. 模块路径映射配置错误

检查moduleNameMapper的正则表达式是否精准匹配firebase/auth的导入路径。正确配置需用^和$限制匹配范围,避免误匹配子路径,同时确认路径指向的Mock文件位置正确:

// 根级或库级 jest.config.ts
module.exports = {
  moduleNameMapper: {
    '^firebase/auth$': '<rootDir>/libs/your-lib/src/__mocks__/firebase-auth.ts'
  }
};

注意NX中<rootDir>默认指向项目根目录,需根据你的Mock文件实际位置调整路径。

2. Mock 文件结构与原模块不匹配

TypeError: Cannot read properties of undefined (reading 'createUser')大多因Mock导出结构和firebase-auth不一致,导致业务代码中获取的auth对象为undefined或缺少目标方法。

假设业务代码调用逻辑如下:

import { getAuth } from 'firebase/auth';

const auth = getAuth();
await auth.createUser(/* 参数 */);

对应的Mock文件firebase-auth.ts需严格匹配原模块的导出结构:

// libs/your-lib/src/__mocks__/firebase-auth.ts
export const getAuth = jest.fn(() => ({
  createUser: jest.fn().mockResolvedValue({ uid: 'mock-user-123' })
}));

// 若用到其他API,同步添加Mock
export const createUserWithEmailAndPassword = jest.fn().mockResolvedValue({ user: { uid: 'mock-user-123' } });

3. NX 配置层级冲突

NX的Jest配置分为根级和库级,若仅在根配置中添加moduleNameMapper,但库级配置未继承根配置,会导致Mock不生效。解决方式是在库的jest.config.ts中添加继承:

module.exports = {
  extends: '../../jest.config.ts', // 路径根据库的位置调整
  // 其他库专属配置
};

实现全局统一 Mock(无需重复配置)

若希望所有库的测试共用同一个firebase-auth Mock,无需每个库单独配置,可按以下步骤操作:

  1. 在项目根目录创建__mocks__/firebase-auth.ts,写入通用Mock逻辑;
  2. 在根级jest.config.ts中配置全局映射:
    module.exports = {
      moduleNameMapper: {
        '^firebase/auth$': '<rootDir>/__mocks__/firebase-auth.ts'
      },
      // 其他全局Jest配置
    };
    
  3. 所有库的jest.config.ts继承根配置,即可自动应用全局Mock。

测试验证示例

在测试文件中断言Mock方法的调用情况,确认Mock生效:

import { getAuth } from 'firebase/auth';
import { registerUser } from '../src/register-user'; // 你的业务函数

describe('registerUser', () => {
  it('调用createUser创建用户', async () => {
    await registerUser('test@example.com', '123456');
    
    const authInstance = getAuth();
    expect(authInstance.createUser).toHaveBeenCalledWith('test@example.com', '123456');
  });
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 16:43:33