# 1. 快照测试(Snapshot Testing)的适用场景与陷阱 A 快照测试能够验证组件功能逻辑是否正确 B 快照测试擅长捕获输出变更,但需要配合评审与更新规范,避免盲目更新掩盖回归 ✓ 正确答案 C 快照测试失败时直接使用 -u 更新快照是最佳实践 D 快照测试可以完全替代单元测试和断言测试
# 2. Mock(jest.mock、vi.mock)与 Stub、Spy 的边界 A Mock 在模块层面替换依赖,Stub 提供固定返回值,Spy 记录并验证调用行为 ✓ 正确答案 B Stub 用于记录函数被调用的次数与参数 C 对所有依赖一律使用 Mock 是最佳测试实践 D vi.spyOn 只能替换实现而不能保留原实现
# 3. Chromatic 与 a11y/性能/契约测试的协作 A Chromatic 只能做视觉快照,不支持 a11y 检查 B axe-core 无法与 Storybook 集成 C 视觉回归测试可以完全替代契约测试 D Chromatic 提供视觉回归与 a11y 检查,与性能预算、契约测试形成分层协作 ✓ 正确答案
# 4. MSW 在 CI/CD 与并行执行的工程价值 A MSW 只能用于浏览器环境,无法在 Node 中拦截请求 B MSW 在浏览器经 Service Worker、在 Node 经拦截器实现请求拦截,CI 中消除网络不确定性并支持并行隔离 ✓ 正确答案 C MSW 需要修改业务代码才能生效 D MSW 的 handler 在并行测试中无需重置
# 5. Vitest 2.x in-source testing 与 type testing 的工程价值 A Vitest 2.x 支持源码内测试与类型测试,需通过构建配置剥离测试代码 ✓ 正确答案 B in-source testing 的测试代码会无条件打包进生产产物 C expectTypeOf 用于在运行时断言函数返回值 D 类型测试只能验证实现逻辑,无法验证导出类型
# 6. 覆盖率报告(v8 provider)coverage.exclude 与阈值(thresholds) A v8 provider 基于转译插桩统计覆盖率 B coverage.exclude 用于排除统计范围,thresholds 未达标时测试失败形成门禁 ✓ 正确答案 C thresholds 只能配置全局阈值,不支持 perFile D coverage.include 无法限定统计范围
# 7. Playwright v1.61 Trace Viewer 与 trace.zip 调试的工程价值 A trace 只记录网络请求,不包含 DOM 快照 B trace 只能在本地生成,无法在 CI 中启用 C Playwright trace 无法记录控制台消息 D trace.zip 可随 CI artifact 共享,Trace Viewer 支持时间轴回放与快照检查 ✓ 正确答案
# 8. Playwright 的 page.locator() 用户视角选择器与 Web-First Assertions A page.locator() 只支持 CSS 选择器 B locator 查询不会自动等待元素出现 C Web-First Assertions 会在断言前自动重试等待,配合 getBy* 用户视角定位降低测试脆弱性 ✓ 正确答案 D strict mode 会让选择器命中多个元素时不报错
# 9. Cypress 与 Playwright 的能力对比 A Cypress 原生支持跨浏览器三引擎并行 B Cypress 测试代码运行在浏览器外的 Node 进程中 C Playwright 无法记录网络请求 D Playwright 通过 CDP 驱动浏览器,原生支持多浏览器、多上下文与 worker 并行 ✓ 正确答案
# 10. Vue Test Utils 的组件挂载与 props 注入 A shallowMount 会完整渲染所有子组件 B Testing Library 断言组件实例的内部状态 C mount 完整挂载组件,props 通过 options.props 注入,global 可配置 plugins 与 stubs ✓ 正确答案 D Vue Test Utils 无法 mock 外部依赖
# 11. Vitest 1.x vi.mock/vi.useFakeTimers 在模块副作用/时间相关单测的工程价值 A vi.useFakeTimers 会让测试等待真实时间流逝 B 使用 fake timers 后无需在 afterEach 中恢复 C fake timers 无法控制 Date D vi.mock 在模块加载前替换依赖,vi.useFakeTimers 虚拟化时间并通过 advanceTimersByTime 推进 ✓ 正确答案
# 12. Testing Library 的用户视角查询与可访问性测试 A Testing Library 推荐优先使用 test id 查询 B getByRole 不区分元素角色 C 按 getByRole/getByLabelText 等用户视角查询,能自然暴露可访问性问题,并与 axe-core 互补 ✓ 正确答案 D jest-axe 可以替代所有交互测试
# 13. Happy DOM 与 jsdom 的取舍 与 Playwright 1.5x 的现代取舍 A happy-dom 与 jsdom 行为完全一致 B jsdom 实现了完整的渲染与布局引擎 C Playwright Browser Mode 只能在浏览器中跑 E2E 测试 D jsdom 生态成熟但性能一般,happy-dom 更快,需要真实布局与浏览器特性时可使用 Playwright Browser Mode ✓ 正确答案
# 14. Cypress Component Testing 在真实组件挂载与真实浏览器执行 A Cypress Component Testing 在 jsdom 环境中挂载组件 B mount 命令在真实浏览器中挂载组件,支持 props 注入与网络 stub,提供可视调试体验 ✓ 正确答案 C 组件测试无法使用 cy.intercept D Cypress Component Testing 只能测试 React 组件
# 15. Cypress 14 与 MSW 的 API 拦截协作 A MSW 经 Service Worker 在真实浏览器中拦截请求,与 Cypress 协作时需等待 worker 注册并维护 handler 一致性 ✓ 正确答案 B MSW 与 cy.intercept 在同一测试中互斥,不能共存 C MSW 只拦截 Node 环境的请求 D Cypress 14 无法使用 MSW
# 16. Storybook 8+ Vitest plugin 在组件故事与单测融合的工程价值 A Vitest plugin 只能把 story 转成视觉快照,不能执行 play 函数 B story 只能用于文档展示,不能用于测试 C 使用该 plugin 后不需要再写任何断言 D Storybook 的 Vitest plugin 将 story 自动转为测试用例,复用 args 与 play 函数,减少重复维护 ✓ 正确答案
# 17. axe-core 的可访问性自动化测试 A axe-core 可以完全替代人工可访问性测试 B axe-core 注入规则引擎检查 DOM 并返回 violations,擅长结构性问题,体验性问题仍需人工验证 ✓ 正确答案 C axe-core 只能检查颜色对比度 D axe-core 无法与 Playwright 集成
# 18. Vitest 与 Jest 在 ESM/TS/SWC 的工程取舍 A Jest 原生支持 ESM,无需任何配置 B Vitest 会执行 TypeScript 类型检查 C Vitest 基于 Vite 原生支持 ESM 与 TS(esbuild 转译),Jest 的 ESM/TS 依赖 Babel 或 ts-jest 配置 ✓ 正确答案 D SWC 只能用于 Jest,不能用于 Vitest
# 19. vi.useFakeTimers 在定时器相关单元测试的精度控制 A toFake 无法限制 fake timers 接管的 API 范围 B toFake 可精确指定接管的 API,setSystemTime 控制时钟,advanceTimersByTime 按时长推进定时器 ✓ 正确答案 C runAllTimers 只推进一个定时器 D fake timers 无法模拟 Date
# 20. Vitest Browser Mode(GA) A Vitest Browser Mode 只能在 jsdom 中运行 B 使用 Browser Mode 后无需再安装浏览器 C Browser Mode 不支持组件测试 D Browser Mode 通过 Playwright/WebdriverIO 在真实浏览器中运行测试,消除模拟器与真实环境的行为差异 ✓ 正确答案
# 21. 断言风格(expect、assert)与测试组织 A expect 采用链式匹配器表达行为期望,assert 是零依赖的函数式断言,测试可用 AAA 模式组织 ✓ 正确答案 B expect 是函数式断言,assert 是链式断言 C 测试用例命名不影响可维护性 D describe 只能嵌套一层
# 22. Vitest 的 vi.mock/vi.spyOn 与 Vitest/Jest 30 的现代取舍 A vi.spyOn 是模块级替换,vi.mock 只记录调用 B Vitest 与 Jest 的 mock API 完全不兼容 C Jest 30 已经完全放弃 ESM 支持 D vi.mock 为模块级替换(自动 hoist),vi.spyOn 记录并验证对象方法调用,两者边界清晰 ✓ 正确答案
# 23. Ladle 在 E2E 与单元测试的协作 A Ladle 是轻量组件开发服务器,story 可作为单元测试与 E2E 的稳定渲染入口,启动快、适合 CI ✓ 正确答案 B Ladle 与 Storybook 完全不兼容 CSF 格式 C Ladle 不支持 play 函数 D Ladle 只能用于文档展示,不能用于测试
# 24. Happy DOM 与 jsdom 在 Vitest 单测 DOM 环境的工程取舍 A Vitest 只能使用 jsdom B happy-dom 与 jsdom 在所有行为上完全一致 C jsdom 生态兼容面广,happy-dom 更快且现代 API 支持更全,可按依赖兼容性选择或混合配置 ✓ 正确答案 D environment 配置不影响测试行为
# 25. 发测试(test.concurrent)与测试隔离(isolate: true)的应用 A test.concurrent 会为每个用例创建独立模块实例 B test.concurrent 的用例自动相互隔离 C isolate: false 能解决所有 flaky 问题 D isolate: true 为每个测试文件建立独立环境,test.concurrent 是文件内并发,两者配合时需注意共享状态与资源隔离 ✓ 正确答案
# 26. Property-based Testing(fast-check) A fast-check 随机生成输入验证不变量,shrinking 自动最小化反例,适合解析、排序等算法类代码 ✓ 正确答案 B Property-based Testing 需要手工枚举所有边界输入 C 属性测试可以完全替代例程化测试 D shrinking 会放大反例以便定位
# 27. TDD/BDD 的流程差异 A TDD 与 BDD 是完全相同的方法论 B BDD 不需要自动化测试 C TDD 以红-绿-重构循环驱动实现,BDD 用 Given-When-Then 表达行为,实践中可分别用于实现级与需求级 ✓ 正确答案 D TDD 要求先写文档再写代码
# 28. 覆盖率(Istanbul/nyc/v8)的行/分支覆盖 A 行覆盖 100% 意味着所有分支都被测试 B Istanbul 与 v8 的覆盖率实现原理相同 C 行覆盖只统计语句是否执行,分支覆盖统计分支去向是否走到,后者更能暴露漏测路径 ✓ 正确答案 D 分支覆盖不需要 if 语句也能统计
# 29. Playwright 的 trace viewer 与 Mock/Stub/Spy 的协作 A page.route 可拦截并 stub 请求,trace 记录拦截结果,配合断言实现 mock/spy/trace 协作定位 ✓ 正确答案 B page.route 只能放行请求,不能 mock 响应 C trace 无法记录被 route 拦截的请求 D route handler 无法 abort 请求
# 30. Vitest 与 Mock/Stub/Spy 的协作 A vi.restoreAllMocks 会清空所有模块的 mock 实现 B vi.fn 创建可断言函数,vi.mock 替换模块,vi.spyOn 包装对象方法,清理时用 restore/clear/reset 防止串扰 ✓ 正确答案 C vi.spyOn 不能保留原实现 D mock.calls 无法断言调用参数
# 31. 单元测试在 CI 与生产联调中应建立哪些可观测性、日志与排障手段,才能让一次失败快速定位到 commit 与用例 A 通过 JUnit/HTML 报告、带用例标识的分级日志与 commit/构建号关联,可让失败快速溯源到具体改动与用例 ✓ 正确答案 B 测试失败时只需看控制台输出即可定位 C CI 中无需归档测试产物 D flaky 用例不应与真实失败区分
# 32. MSW(Mock Service Worker)在网络层 Mock 的应用 A MSW 在浏览器与 Node 端拦截真实请求路径,handler 声明式组织并可双端复用,贴近生产行为 ✓ 正确答案 B MSW 需要业务代码显式支持才能生效 C MSW 的 handler 无法按场景 override D MSW 可以模拟真实网络带宽变化
# 33. WebDriverIO 与 Selenium 的现代取舍 A WebdriverIO 与 Selenium 是完全不同的协议 B WebdriverIO 无法接入 Selenium Grid C Selenium 原生支持 ESM 与自动等待 D WebdriverIO 构建于 WebDriver 协议之上,提供自动等待与现代测试运行器,适合需要网格与移动端能力的团队 ✓ 正确答案
# 34. Playwright 1.5x 在大型项目测试金字塔的工程价值 A 测试金字塔要求 E2E 数量最多 B Playwright 1.5x 以组件测试、跨浏览器并行与 fixtures 机制支撑大型项目金字塔各层 ✓ 正确答案 C Playwright 不支持组件测试 D fixtures 只能用于单元测试
# 35. page.evaluate 与边界(main world vs isolated world) A evaluate 中可以直接读取页面的所有全局变量 B evaluate 的参数可以传递任意函数与类实例 C page.evaluate 默认在 isolated world 执行,与页面共享 DOM 但不共享 JS 全局变量 ✓ 正确答案 D isolated world 与页面主世界完全隔离,无法操作 DOM
# 36. Playwright Trace Viewer 与 Codegen 在测试维护的工程价值 A Codegen 生成的代码无需人工审视 B Codegen 录制生成稳健选择器与断言,Trace Viewer 回放失败现场,共同降低 E2E 编写与维护成本 ✓ 正确答案 C Trace Viewer 只能在本地使用 D Codegen 不遵循用户视角查询规范
# 37. Storybook + Chromatic 的视觉回归测试 A Chromatic 的差异会自动更新基线,无需人工确认 B 视觉回归测试只能检测颜色变化 C Storybook + Chromatic 抓取 story 截图做像素 diff,通过基线管理与审批流治理视觉回归 ✓ 正确答案 D TurboSnap 会重新测试所有 story
# 38. Storybook 的 play 函数与交互测试 在团队规范与可维护性的工程价值 A play 函数只能在本地手动执行 B play 函数让 story 成为可执行交互规格,文档、视觉与交互测试共用一份描述,降低维护成本 ✓ 正确答案 C play 函数与 Testing Library 不兼容 D story 无法承载断言
# 39. MSW 与 Playwright 的 API 拦截协作 A MSW 以模块化 handler 提供接口契约复用,page.route 适合测试内临时 stub,两者可协作分工 ✓ 正确答案 B MSW 与 page.route 在同一测试中必然冲突 C MSW 无法在 Playwright 的浏览器中启动 D page.route 无法 fulfill 自定义响应
# 40. Cypress 14+ 在端到端测试的真实浏览器与开发体验的现代应用 A Cypress 在 Node 进程中模拟浏览器执行 B Cypress 无法复用登录状态 C cy.intercept 无法模拟请求失败 D Cypress 14+ 在真实浏览器中执行,提供时间旅行与命令日志等调试体验,并支持组件测试与网络 stub ✓ 正确答案
# 41. Playwright 在跨浏览器(Chromium、WebKit、Firefox) A Playwright 只能驱动 Chromium B WebKit 引擎无法由 Playwright 驱动 C 同一测试在三个浏览器中的行为必然一致 D Playwright 通过 projects 声明 Chromium/WebKit/Firefox 矩阵并行执行,按引擎条件跳过不适用用例 ✓ 正确答案
# 42. Vitest 1.x 在 Vite 项目中的测试速度与现代实践 A Vitest 复用 Vite 配置与模块图,按需转换加缓存实现快速启动与热重载 ✓ 正确答案 B Vitest 需要独立的 Webpack 配置才能运行 C Vitest 的 watch 模式不支持热更新 D Vitest 只能串行执行测试
# 43. Component Story Format 3(CSF3) A CSF3 中每个 story 必须写成函数形式 B CSF 格式无法被测试工具消费 C CSF3 以 meta + named exports 声明 story,支持 args 与 play 函数,一份描述可驱动文档、测试与视觉回归 ✓ 正确答案 D CSF3 移除了 args 机制
# 44. Playwright 的 page.locator 与自动等待(auto-waiting)的工程价值 A locator 在创建时立即查询 DOM B locator 惰性解析并在操作前自动等待元素可见、稳定、可操作,配合语义化查询降低 flaky ✓ 正确答案 C 自动等待会无条件等待固定时长 D 严格模式会让定位永远失败
# 45. Visual Regression Testing(Percy、Chromatic) A 视觉回归的基线应自动更新,无需人工审批 B 快照可以在动画运行中拍摄 C 视觉回归可以替代功能测试 D Percy/Chromatic 上传快照做像素 diff,通过基线审批流治理视觉变更,需稳定环境保证可复现 ✓ 正确答案
# 46. MSW(Mock Service Worker)在浏览器与 Node 测试的 API mock 协作 A MSW 在浏览器与 Node 使用完全不同的 handler 语法 B MSW 无法拦截 fetch 请求 C setupWorker 与 setupServer 复用同一套 handler,浏览器与 Node 测试的 API mock 语义一致 ✓ 正确答案 D Node 端 MSW 需要真实网络才能工作
# 47. Testing Library 的 getByRole、getByLabelText 在无障碍测试的工程实践 A getByRole 只能按元素标签名查询 B getByRole 按 ARIA 角色与可访问名称查询,getByLabelText 验证 label 关联,查询失败即暴露无障碍缺陷 ✓ 正确答案 C getByLabelText 不需要 label 即可工作 D 语义查询与无障碍检查无关
# 48. Cypress Component Testing 在组件隔离测试相较 E2E 的取舍 A 组件测试能验证完整的后端集成 B 组件测试隔离组件与外部依赖,快且稳但覆盖不了集成,E2E 覆盖完整旅程但慢且脆,二者按金字塔分层 ✓ 正确答案 C E2E 比组件测试更稳定 D 组件测试不需要真实浏览器
# 49. flaky(不稳定)测试的治理,重试策略、确定性因素(时间/网络/顺序)、flaky 报告与 CI 中的隔离与修复流程? A 增大重试次数即可根治 flaky 测试 B 一旦重试通过就不需要关注 flaky C flaky 测试与执行顺序无关 D flaky 的根因常为时间/网络/顺序不确定,重试只是止血,需通过确定性改造与 flaky 报告机制闭环治理 ✓ 正确答案
# 50. Playwright 的并行测试(workers)在 CI 的工程性能优化 A workers 数量越大 CI 越快且无副作用 B 并行测试不需要隔离外部资源 C workers 按文件并行,CI 优化需匹配机器资源并使用 sharding 分片与资源隔离 ✓ 正确答案 D sharding 会降低测试覆盖率
# 51. Cypress 的 cy.session 在测试间状态复用的工程应用 A cy.session 缓存登录等会话状态供测试复用,可建立多角色会话矩阵,需处理失效与数据隔离 ✓ 正确答案 B cy.session 只能用于登录场景 C 复用会话后不需要清理任何状态 D cy.session 会减慢测试
# 52. Playwright 的 test.use 在多配置(设备、权限)测试的工程实践 A test.use 只能配置视口大小 B 登录状态无法通过配置注入 C test.use 的配置对所有文件全局生效且不可覆盖 D test.use 可注入视口、权限与存储状态等配置,与 projects 组合实现设备/权限矩阵化测试 ✓ 正确答案
# 53. a11y testing(axe-core、jest-axe) A axe-core 能覆盖所有 WCAG 检查点 B jest-axe 提供 toHaveNoViolations 断言,单测与 E2E 均可集成,violations 与 incomplete 需分层处理 ✓ 正确答案 C violations 与 incomplete 含义相同 D a11y 测试只能手动执行
# 54. Storybook Test Runner 在 CI 的组件快照测试与现代应用 A Test Runner 只能做渲染冒烟,不支持断言 B DOM 快照可以替代像素级视觉回归 C Test Runner 无法与 CI 集成 D Storybook Test Runner 基于 Playwright 遍历 story,支持 DOM 快照、a11y 检查与 CI 集成 ✓ 正确答案
# 55. Playwright 的网络限速(throttling)在真实网络模拟的工程价值 A Playwright 通过 CDP 网络模拟设置带宽与延迟,用于慢网 UX 验证与可复现的性能测量 ✓ 正确答案 B Playwright 无法模拟离线状态 C 网络限速会影响所有浏览器上下文 D 模拟网络只能加速不能减速
# 56. Cypress 的录制(cypress 录制)模式在测试编写的工程实践 A 录制生成的测试可以直接用于生产环境 B 录制模式生成测试初稿,需人工补充断言与语义化选择器,适合探索与 bug 复现 ✓ 正确答案 C 录制模式无法回放操作 D 录制产物不需要维护
# 57. 并行测试的资源隔离,测试数据库/端口/文件系统/浏览器上下文的隔离方案在 CI 并行执行下的工程实践? A 并行测试共享同一个测试数据库不会有问题 B 端口可以硬编码共享 C 并行测试需按 worker 隔离数据库(schema/事务/租户)、动态端口、独立文件目录与浏览器上下文 ✓ 正确答案 D 重试次数越多越不需要资源隔离