我们已经注意到我们的单元测试执行得非常慢,罪魁祸首似乎是用于查询按钮元素等的getByRole
。下面是一个今天给我们带来问题的查询示例:
userEvent.click(screen.getAllByRole('button', { name: 'Accept' })[0]);
使用console.time()
,我们测量该查询的执行时间为12782ms。切换到getByText
后,查询需要14ms,这意味着getByRole
需要近1000倍的时间(!!)。
我知道getByRole
预期运行速度较慢,但它似乎极端。我在网上找到了一些线程,详细说明了一些测试花费了5倍的时间,但没有像这样。添加hidden: true
作为选项可以稍微加快速度,但不是很大。
我无法共享正在测试的代码,因为它是私有的。我不会将该组件描述为特别复杂,尽管它由几个低级组件组成,并使用模拟的网络请求。
是否有任何已知的原因运行缓慢这样的查询,或任何方法,我们可以加快执行而不牺牲getByRole
提供的信心?
getByRole
查询需要搜索整个可访问性树和可见性检查(就可访问性而言),其中涉及不可忽略的样式计算和aria-*
计算。
这里也讨论了速度https://github.com/testing-library/dom-testing-library/issues/552#issuecomment-625172052
我认为这是一个权衡b/w信心(相信你的页面是可访问的)和测试速度。
加快速度的一个快速方法是配置defaultHidden
测试库配置,我看到速度提高了4倍,但这也是一种权衡,因为它不检查可访问性树中的目标元素可见性。