我最近开始将我当前的React 16和17项目升级到React 18。因此,我不得不将我的测试库从Enzyme更改为React测试库(RTL)。我遇到了一个找不到等效库的场景。我使用material-ui作为样式库。在Enzyme中,我可以如下查询组件:
const wrapper = shallow(<InitialForm />);
const moreButton = wrapper.find(MoreMenu);
expect(moreButton.props().disabled).toBe(true);
我正在RTL中寻找类似的东西。我也尝试了findByRole,但它没有给予类似的输出。
先谢了。
1条答案
按热度按时间vwkv1x7d1#
作为一个同时使用这两种查询的人,我了解到RTL在概念上与Enzyme非常不同。RTL是非常受可访问性驱动的,这就是为什么他们鼓励使用像
getByRole
这样的高优先级查询。在您的情况下,我认为您可以使用它来抓取按钮:如果该组件中有多个按钮,可以尝试传递第二个options参数来查找所需的确切按钮:
const button = screen.getByRole('button', { name: '<the text in the button>' });
值得注意的是,RTL不鼓励进行正确的Assert,相反,他们推荐编写用户驱动的测试。我用RTL编写测试的方法是从用户的Angular 思考和问自己问题,如“用户现在看到了什么?”或“用户屏幕上发生了什么变化?"因此,在您的示例中,我可能会在按钮上添加一个单击事件,并Assert分配给它的onClick函数没有被调用