前端知库

Testing Library 查询方式为什么优先按用户可见语义?

从 getByRole、getByLabelText 和 getByTestId 的优先级理解稳定组件测试,避免把实现细节写进断言。

参考答案

Testing Library 倾向用用户可感知的角色、名称、标签和文本查询元素,例如 getByRole、getByLabelText。这样测试更接近真实使用,也能同时暴露缺少可访问名称的问题。

查询优先级不是绝对规则:没有合适语义时可以使用文本、显示值或 data-testid。data-testid 应作为最后手段,不能把组件内部 class、DOM 层级或第三方实现细节当成稳定契约。

断言要区分同步、异步和消失状态,异步内容使用 findBy 或等待工具,避免固定 sleep。测试失败时先检查真实用户是否能找到并操作该元素,而不是马上降低查询条件。