单元与端到端测试

共 57 题
#

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 重试次数越多越不需要资源隔离