
Reaction测试体系用ReactionTestAPICore编写GraphQL集成测试的完整教程【免费下载链接】reactionProject has been discontinued ////// Mailchimp Open Commerce is an API-first, headless commerce platform built using Node.js, React, GraphQL. Deployed via Docker and Kubernetes.项目地址: https://gitcode.com/gh_mirrors/re/reactionReaction 是一个基于 Node.js、React 与 GraphQL 构建的 API 优先无头电商Headless Commerce平台。它的测试体系中最值得新手学习的是如何用 ReactionTestAPICore 在 Jest 环境中启动一个真实但隔离的 API 服务从而编写端到端的 GraphQL 集成测试。本教程将带你完整掌握 Reaction 测试体系从搭建隔离的测试环境到编写查询Query与变更Mutation测试再到模拟登录用户与自动清理数据。一、Reaction 集成测试的整体架构Reaction 的 GraphQL 集成测试集中存放在 apps/reaction/tests/integration/ 目录下官方说明见 README.md。目录结构非常直观api/mutations1/、api/mutations2/按 Mutation 名称划分如createProduct/、checkout/api/queries/按 Query 名称划分如viewer/、ordersByAccountId/general/通用场景测试如远程 GraphQL 调用每个测试目录都遵循统一的三件套模式以 viewer.test.js 为例文件作用viewer.test.jsJest 测试主体ViewerFullQuery.graphql独立存放的 GraphQL 操作语句核心设计理念每个测试文件在beforeAll中启动一个独立的 Reaction 应用实例使用随机命名的临时 MongoDB 数据库测试结束后testApp.stop()直接丢弃整个临时数据库——因此无需编写任何数据清理代码。二、ReactionTestAPICore测试环境的核心ReactionTestAPICore 是对生产类 ReactionAPICore 的测试包装器源码位于 packages/api-core/src/ReactionTestAPICore.js。它为测试提供了四个关键能力一键启动/停止start()自动生成随机数据库名沙箱隔离并刻意不监听真实端口stop()会删除整个临时数据库执行 GraphQL 操作testApp.query(gql)与testApp.mutate(gql)直接在进程内调用 Apollo Server返回data若 GraphQL 报错则直接抛出异常模拟登录态setLoggedInUser(user)为用户生成登录令牌并写入上下文测试即可验证鉴权后的返回结果直接操作数据集合通过testApp.collections可像操作 MongoDB 一样预置测试数据三、编写第一个集成测试分步指南下面以一个真实测试为蓝本拆解完整流程。参考 createProduct.test.js。步骤 1准备测试环境与插件在beforeAll中依次执行用importPluginsJSONFile读取 apps/reaction/plugins.json注册全部业务插件注意示例中会删除files插件以避免文件存储报错调用await testApp.start()启动应用步骤 2将 GraphQL 语句外置通过importAsString工具位于 packages/api-utils/lib/把.graphql文件读入字符串再交给testApp.query()或testApp.mutate()封装成可重复调用的函数。这样测试代码与查询语句彻底分离可读性大幅提升。步骤 3预置数据与登录用户用 Factory 工具基于工厂模式快速生成 Account、Group 等模拟对象通过testApp.collections.Groups.insertOne(...)写入所需权限组调用testApp.setLoggedInUser({ _id, groups, shopId })模拟管理员登录步骤 4断言返回值并自动收尾测试函数中直接await mutate({ input: ... })用expect(result).toEqual(...)断言完整的 GraphQL 响应结构afterAll中一行testApp.stop()完成清理。另外建议加上jest.setTimeout(300000)放宽超时——因为每个测试文件都要真实启动一次应用。四、进阶技巧与最佳实践鉴权测试成对编写先在未登录状态执行查询如viewer应返回null再setLoggedInUser后验证完整数据两个用例即可覆盖权限边界不关心字段的断言使用jasmine.any(String)匹配时间戳等动态值避免断言脆弱按业务域组织目录新增插件的 API 测试时遵循mutations1/操作名/或queries/操作名/的命名惯例保持与 tests/integration/ 现有 298 个测试文件风格一致核心类同步维护ReactionTestAPICore 的registerPlugin注释明确提示需与 ReactionAPICore.js 中真实实现保持同步五、总结Reaction 的测试体系展示了一套优雅的 GraphQL 集成测试范式独立数据库沙箱 进程内 Apollo 调用 工厂化测试数据 零清理代码。理解了 ReactionTestAPICore.js 的设计你不仅能为 Reaction 编写新测试也能把这套思路迁移到自己的 Node.js GraphQL 项目中。【免费下载链接】reactionProject has been discontinued ////// Mailchimp Open Commerce is an API-first, headless commerce platform built using Node.js, React, GraphQL. Deployed via Docker and Kubernetes.项目地址: https://gitcode.com/gh_mirrors/re/reaction创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考