我正在使用React Testing库和Typescript。
我需要测试菜单:单击一个按钮,测试是否显示包含内容的Popper
,再次单击按钮,并测试是否显示包含内容的Popper
。我还要测试触发按钮是否一直可见。
import React from 'react';
import { fireEvent, render, RenderResult, screen } from '@testing-library/react';
import { AMenu } from './AMenu';
const firstMenuItemLabel = 'Location 1';
const menuTriggerLabel = 'locations';
describe('<AMenu />', () => {
let component: RenderResult;
let button: Element;
beforeEach(() => {
component = render(
<AMenu
classes={{
root: '',
menuButton: '',
}}
/>
);
button = component.getByText(menuTriggerLabel).parentElement as Element;
});
it('should show and hide on click on menu trigger', () => {
expect(button).toBeVisible();
expect(component.queryAllByText(firstMenuItemLabel)).toHaveLength(0);
fireEvent.click(button);
expect(button).toBeVisible();
expect(component.getByText(firstMenuItemLabel)).toBeVisible();
fireEvent.click(button);
expect(component.queryAllByText(firstMenuItemLabel)).toHaveLength(0); // <- here it fails
});
});
在浏览器中一切正常。 AMenu
与屏幕尺寸无关。
当我console.log(component.debug())
出现时,我可以看到在第一个事件触发后可见的Popper
渲染组件。第二次大火不会改变组件HTML。
答案 0 :(得分:0)
您需要使用waitFor
和waitForElementToBeRemoved
来确保在对它们进行断言之前,正在等待从DOM中添加/删除元素。
请参阅:https://testing-library.com/docs/guide-disappearance/#waiting-for-appearance