尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

如何用 seed-demo-user 为 freeCodeCamp E2E 测试种子化认证演示用户?

如何用 seed-demo-user 为 freeCodeCamp E2E 测试种子化认证演示用户? 如何用 seed-demo-user 为 freeCodeCamp E2E 测试种子化认证演示用户【免费下载链接】freeCodeCampfreeCodeCamp.orgs open-source codebase and curriculum. Learn math, programming, and computer science for free.项目地址: https://gitcode.com/GitHub_Trending/fr/freeCodeCamp在 freeCodeCamp 仓库中跑 Playwright E2E 测试时测试需要以已登录状态访问页面而登录凭据来自数据库里预置的演示用户。seed-demo-user 脚本负责把固定 ID 的演示用户写入 MongoDBe2e/global-setup.ts 再调用它并抓取会话生成playwright/.auth/下的 storage state 文件供后续测试用例复用。本文说明如何在本地为 E2E 测试种子化认证用户certifieduser及开发用户developmentuser并给出可用的检查手段。前提条件脚本读取根目录的.env文件seed-demo-user.js 第 7 行显式解析../../../.env并依赖其中的MONGOHQ_URL连接 MongoDB。仓库根目录的 sample.env 给出了本地默认值MONGOHQ_URLmongodb://127.0.0.1:27017/freecodecamp?directConnectiontrue按 sample.env 复制出.envcp sample.env .env并确保 127.0.0.1:27017 上有一个可用的 MongoDB 实例。连接串指向的库名必须是freecodecamp脚本第 103 行使用client.db(freecodecamp)在user和UserToken集合中读写。E2E 侧还有两个已文档化的依赖e2e/playwright.config.ts 的baseURL取HOME_LOCATION默认http://127.0.0.1:8000API_LOCATION在 sample.env 中默认为http://localhost:3000。global-setup 用API_LOCATION请求/signin接口因此执行 setup 时本地 API 需可访问。配置中webServer会自动docker run --rm -p 1025:1025 -p 8025:8025 axllent/mailpit用于接收测试中 API 发出的邮件需要本地有 Docker。脚本写入哪些用户用户文档定义在 tools/scripts/seed/user-data.js共 6 个固定ObjectId的用户用户_id邮箱用户名demoUser默认种子用户5bd30e0f1caf6ac3ddddddb5foobar.comdevelopmentuserfullyCertifiedUser5fa2db00a25c1c1fa49ce067foobar.comcertifieduserblankUser5bd30e0f1caf6ac3ddddddb9barbar.comtwahapublicUser663b839b24a8b29f57728b13barbars.compublicuseralmostFullyCertifiedUser同 blankUserId——unclaimedUser5bd30e0f1caf6ac3ddddddb1——unclaimedUser与almostFullyCertifiedUser都是fullyCertifiedUser的展开变体user-data.js 第 76915、76931 行。注意demoUser与fullyCertifiedUser使用同一个邮箱foobar.com。这正是 global-setup.ts 第 25-26 行注释说明的现象legacy 认证接口不带邮箱查询它登录的是当前拥有 foobar.com 的那个种子用户所以两次种子化切换了登录身份。脚本的执行逻辑运行脚本会按 seed-demo-user.js 的run()顺序执行client.db(admin).command({ ping: 1 })验证 Mongo 连通性调试日志输出Connected successfully to mongodropUserTokens()从UserToken集合删除上述 6 个userIds对应的全部 token 记录dropUsers()从user集合删除这 6 个_id对应的用户按命令行参数插入所选用户见下表随后无条件再插入blankUser和publicUser调试日志输出local auth user seed complete。出错时脚本打印Oh noes!! Error seeding local auth user.并process.exit(1)。重要副作用每次运行都会删除这 6 个固定 ID 用户在user和UserToken集合中的既有记录属于破坏性写入。请勿把MONGOHQ_URL指向存有真实业务数据的库在共享环境执行前确认库中可安全重置这些种子 ID。参数与用户变体parseArgs定义的选项seed-demo-user.js 第 18-26 行参数类型效果--certified-userboolean改为插入fullyCertifiedUser--almost-certified-userboolean改为插入almostFullyCertifiedUser--unclaimed-userboolean改为插入unclaimedUser以上都不传—默认插入demoUser--top-contributorboolean给 demoUser、blankUser、fullyCertifiedUser 设置yearsTopContributor: [2017, 2018, 2019]--set-true key...string, multiple把指定键设为true作用于上述三个用户--set-false key...string, multiple把指定键设为false--seed-trophy-challengesboolean用脚本内置的 6 条奖杯挑战记录覆盖completedChallenges四个变体是互斥的if / else if / else分支一次只插入一种主用户但blankUser、publicUser每次都会插入。E2E 全局 setup 实际使用的两条命令从仓库根目录执行等价于 global-setup.ts 中的相对路径写法node tools/scripts/seed/seed-demo-user --certified-user node tools/scripts/seed/seed-demo-user第二条不带任何 flag种子化的是developmentuser邮箱同为foobar.com认证标志为 false。E2E 如何消费种子用户e2e/playwright.config.ts 配置了一个名为setup的项目testMatch: global-setup.ts且 chromium/firefox/webkit 及两个移动端项目都声明dependencies: [setup]——即任何浏览器测试执行前Playwright 先完整跑一遍 global-setup。e2e/global-setup.ts 包含两个describe块按文件顺序执行certifieduser块beforeAll中execSync(node ../tools/scripts/seed/seed-demo-user --certified-user )种子化认证用户setup 测试请求API_LOCATION /signin再把请求上下文中的会话写入playwright/.auth/certified-user.json。developmentuser块先强制空 storage state避免继承上一个块里认证用户的 cookiebeforeAll执行无参脚本把foobar.com的所有者切回developmentuser登录并写入playwright/.auth/development-user.jsonafterAll再执行一次--certified-user恢复默认状态。恢复默认是有意为之的playwright.config.ts中use.storageState的全局默认值就是playwright/.auth/certified-user.json后续所有用例默认以认证用户身份运行。另外配置中workers: 1且fullyParallel: false因为 setup 对数据库状态是全局改写的串行执行才能保证登录身份不被并发用例打乱。运行与验证在仓库根目录执行工作目录不影响脚本定位.env因为它按脚本自身位置解析node tools/scripts/seed/seed-demo-user --certified-user判断结果的手段按文档实际提供的脚本退出码与错误输出失败时打印Oh noes!! Error seeding local auth user.并以非零码退出process.exit(1)未报错即完成第 4、5 步的插入。debug 日志脚本使用debug(fcc:tools:seedLocalAuthUser)设置DEBUGfcc:tools:seedLocalAuthUser后可看到Connected successfully to mongo与local auth user seed complete两条日志seed-demo-user.js 第 124、141 行。E2E 全链路验证运行 Playwright 时setup项目成功、两个can sign in测试通过、且生成了playwright/.auth/certified-user.json与playwright/.auth/development-user.json说明种子用户、登录接口与会话持久化都工作正常依赖certified-user.json的浏览器用例随后即可在HOME_LOCATION页面以certifieduser身份访问。限制与注意事项脚本对 6 个固定_id做删除后插入重复运行是幂等的但会清除这些 ID 的旧 token 与旧数据--set-true/--set-false/--top-contributor/--seed-trophy-challenges只作用于demoUser、blankUser、fullyCertifiedUser三个对象对unclaimedUser、almostFullyCertifiedUser无效seed-demo-user.js 第 86-99 行的forEach列表global-setup.ts中的execSync使用相对路径node ../tools/scripts/...因此 Playwright 必须按配置从e2e/目录启动Playwright 默认以配置文件所在目录为基准手动执行脚本时则可用仓库根目录下的完整相对路径种子用户与登录接口依赖本地 APIAPI_LOCATION可达setup 阶段 API 未启动会直接表现为登录请求失败。【免费下载链接】freeCodeCampfreeCodeCamp.orgs open-source codebase and curriculum. Learn math, programming, and computer science for free.项目地址: https://gitcode.com/GitHub_Trending/fr/freeCodeCamp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表