使用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
相关产品推荐
相关产品推荐

