测试
测试
相关源文件
本章引用的主要源码文件:
mem0-ts/jest.integration.config.jsmem0-ts/src/client/tests/integration/batch.test.tsmem0-ts/src/client/tests/integration/crud.test.tsmem0-ts/src/client/tests/integration/global-setup.tsmem0-ts/src/client/tests/integration/global-teardown.tsmem0-ts/src/client/tests/integration/helpers.tsmem0-ts/src/client/tests/integration/initialization.test.tsmem0-ts/src/client/tests/integration/management.test.tsmem0-ts/src/client/tests/integration/search.test.tsmem0-ts/src/client/tests/memoryClient.crud.test.tsmem0-ts/src/client/tests/memoryClient.project.test.tsmem0-ts/src/client/tests/memoryClient.search.test.tsmem0-ts/src/oss/tests/dimension-autodetect.test.tsmem0-ts/src/oss/tests/memory.add.test.tsmem0-ts/src/oss/tests/memory.crud.test.tsmem0-ts/src/oss/tests/memory.init.test.tsmem0-ts/src/oss/tests/memory.validation.test.tsmem0-ts/src/oss/tests/tsup-externals.test.tsmem0/__init__.pymem0/configs/prompts.pymem0/memory/main.pymem0/memory/storage.pymem0/memory/utils.pytests/configs/test_prompts.pytests/memory/test_main.pytests/test_chatty_llm_parsing.pytests/test_main.pytests/test_memory.pytests/test_proxy.py
本文档涵盖了 Mem0 代码库中使用的测试基础设施、工具和流程。Mem0 的测试分为三个主要领域:核心 Python mem0 包、TypeScript SDK(mem0-ts)以及托管平台的集成测试。
测试框架与工具
Mem0 使用 pytest 作为 Python 的主要测试框架,使用 jest 作为 TypeScript 的测试框架,并辅以其他工具进行代码质量和覆盖率分析。
核心测试栈
| 工具 | 用途 | 配置 |
|---|---|---|
pytest | Python 测试执行框架 | 所有 Python 测试套件的默认运行器 |
jest | TypeScript 测试执行框架 | 用于 mem0-ts 单元测试和集成测试 mem0-ts/jest.integration.config.js |
ruff | Python 代码检查和格式化 | CI 检查和预提交钩子 .github/workflows/ci.yml:112-115 |
hatch | 环境管理 | 多版本 Python 测试(3.10-3.12).github/workflows/ci.yml:83-99 |
codecov | 覆盖率报告 | 集成用于覆盖率分析 .github/workflows/ci.yml:151-157 |
来源: .github/workflows/ci.yml:1-117,mem0-ts/jest.integration.config.js
测试组织
仓库按语言和部署模型(OSS 与平台)对测试进行组织。
来源: tests/test_main.py:1-10,mem0-ts/src/oss/tests/memory.add.test.ts:1-7,mem0-ts/src/client/tests/integration/crud.test.ts:1-18
Python 测试的实现
模拟与夹具
Python 测试使用 pytest.fixture 和 unittest.mock 将内存逻辑与外部的大语言模型(LLM)、嵌入向量和向量存储提供者隔离开来。memory_instance 夹具 tests/test_main.py:18-32 使用模拟工厂设置了一个 Memory 类。
@pytest.fixture
def memory_instance():
with (
patch("mem0.utils.factory.EmbedderFactory") as mock_embedder,
patch("mem0.memory.main.VectorStoreFactory") as mock_vector_store,
patch("mem0.utils.factory.LlmFactory") as mock_llm,
patch("mem0.memory.telemetry.capture_event"),
):
mock_embedder.create.return_value = Mock()
mock_vector_store.create.return_value = Mock()
mock_llm.create.return_value = Mock()
return Memory(MemoryConfig(version="v1.1"))
来源: tests/test_main.py:18-32,tests/memory/test_main.py:10-27
数据流与代码实体映射
下图展示了在标准内存添加操作中,测试实体与它们所验证的核心系统类之间的映射关系。
来源: mem0/memory/main.py:103-170,tests/test_main.py:55-67,tests/memory/test_main.py:48-64
TypeScript 集成测试
TypeScript SDK 包含针对真实 Mem0 平台 API 运行的集成测试。这些测试由 MEM0_API_KEY 环境变量控制。
集成辅助函数
createTestClient 辅助函数 mem0-ts/src/client/tests/integration/helpers.ts:24-28 使用真实的 API 密钥初始化一个 MemoryClient。为了处理平台 API 的异步特性,测试使用 waitForMemories mem0-ts/src/client/tests/integration/helpers.ts:63-84 轮询 getAll 端点,直到内存被处理完毕。
集成测试生命周期
- 设置:抑制遥测噪音并初始化客户端
mem0-ts/src/client/tests/integration/crud.test.ts:29-32。 - 执行:执行 CRUD 操作(添加、获取、更新、删除)。
- 清理:使用
cleanupTestUser清除测试数据mem0-ts/src/client/tests/integration/helpers.ts:190-204。
来源: mem0-ts/src/client/tests/integration/helpers.ts:1-234,mem0-ts/src/client/tests/integration/crud.test.ts:24-37
持续集成管线
CI 工作流架构
来源: .github/workflows/ci.yml:1-118,.github/workflows/ts-sdk-ci.yml
专项校验
敏感数据脱敏
系统使用精确匹配 mem0/memory/main.py:69-88 和后缀匹配 mem0/memory/main.py:91-97 来识别敏感字段。_is_sensitive_field 函数 mem0/memory/main.py:171-184 确保在捕获遥测数据之前对这些字段进行脱敏处理。
参数校验
测试会验证顶级实体参数(如 user_id 或 agent_id)会被拒绝,而应使用 filters 字典,以防止作用域歧义 mem0/memory/main.py:103-110。
大语言模型(LLM)响应解析
TestAddToVectorStoreErrors 测试套件 tests/memory/test_main.py:30-64 确保内存系统能够优雅地处理大语言模型(LLM)在事实提取过程中返回的格式错误或空响应,通过返回空结果而不是崩溃来保证系统稳定性。
来源: mem0/memory/main.py:68-110,mem0/memory/main.py:171-184,tests/memory/test_main.py:48-64