在我的单元测试中,我试图选择下面的div
,以便可以单击它。
<div>
<h1>Avocado Toast</h1>
<p>Avocado toast served on country bread, served with a side of veggies</p>
</div>
基于this stackoverflow answer,我尝试将getByText()
与closest()
结合使用:
const avocadoToast = screen.getByText('Avocado Toast').closest('div');
userEvent.click(avocadoToast);
然而,Typescript在第二行抱怨avocadoToast
可能为null(因为closest()
可能返回null):
error TS2345: Argument of type 'HTMLDivElement | null' is not assignable to parameter of type 'Element'.
Type 'null' is not assignable to type 'Element'.
我通过在这一行添加一个非空Assert操作符来解决这个问题:
userEvent.click(avocadoToast!);
但是我觉得我没有正确地构建测试。有更好的办法吗?
3条答案
按热度按时间ryoqjall1#
你可以在Assertclick事件之前添加一个简单的nullcheck:
ngynwnxp2#
所需组件是
div
这一事实是一个实现细节,不建议对其进行测试。如Guiding Principles中所述,
以用户使用的方式测试应用程序组件
用户会点击一个组件,因为它有一些文本,标签,图像与alt文本等。如果这些都不适用,则可以使用ByTestId
nwsw7zdq3#
在Kent C. Dodds的大量研究和指导之后,我决定采用以下解决方案,因为它很简单:
注意,在Jest中测试失败的正确方法是抛出一个错误(参见stackoverflow answer)。
一个更详细的解决方案是通过使用here准则使原始HTML(旨在成为一张卡片)更容易访问。