You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用testing-library时是否需要校验getBy/findBy返回值为真值?

你的判断是完全正确的,简化后的写法不存在问题,原代码里的toBeTruthy()断言属于完全冗余的部分。

核心依据

按照testing-library的设计规则,getBy*、findBy*系列查询的逻辑就是:如果没有匹配到符合条件的元素,会直接抛出错误终止测试。这两类查询永远不会返回假值,findBy*作为异步查询也永远不会resolve为假值,所以完全不需要额外对返回值做非空断言。

你直接写await findByText(xxx)的效果和原代码的冗余断言是100%等价的:只要查询没有抛出错误,就说明对应元素确实存在,测试通过;如果元素不存在,查询会直接抛错,测试标记为失败,不需要后续的二次校验逻辑。

很多开发者会习惯性加冗余断言,大多是技术栈迁移的习惯遗留:早年使用其他测试工具时,查询失败不会抛错只会返回null/undefined,需要手动加非空判断,切换到testing-library之后没有调整对应的写法,就留下了这类冗余代码。

可选优化

如果你们团队的代码规范要求所有校验逻辑必须显式通过expect声明,方便不熟悉testing-library规则的开发者快速理解测试意图,也可以写成更语义化的形式:

expect(await findByText('Showing details for 5')).toBeInTheDocument()

这种写法和你直接await查询的效果完全一致,只是可读性更强。


内容的提问来源于stack exchange,提问作者Pedro Rosário

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 12:06:01