reactjs 如何在React测试库Jest中测试点击时呈现同一组件中html元素的按钮?

cnh2zyt3  于 2022-11-29  发布在  React
关注(0)|答案(1)|浏览(169)

My OrderModuleHeader是一个可单击的div,单击时会呈现div,如下所示:

const [orderModuleIsOpen, setOrderModuleIsOpen] = useState(true);

render (
<div>

     <OrderModuleHeader data-testid="orderModuleHeaderButton"
              onClick={() => setOrderModuleIsOpen(!orderModuleIsOpen)}
            >
              <NavigationArrow>
                <FontAwesomeIcon
                  icon={orderModuleIsOpen ? faChevronUp : faChevronDown}
                  className="fa-xs"
                />
              </NavigationArrow>
     </OrderModuleHeader>
            {orderModuleIsOpen && (
              <OrderModuleBody>Some content</OrderModuleBody>
)
 </div>)

因此,只有在单击按钮时才会显示div OrderModuleBody。
我开始我的测试如下:

describe('Expand body button', () => {
it('should render OrderModuleBody when clicked', () => {
      const button = screen.getByTestId('orderModuleHeaderButton');
      
      fireEvent.change() ... 
    });
}

我意识到我使div成为可点击的,在测试中我称它为按钮。
我不知道究竟需要在fireEvent中编写什么来测试OrderModuleBody(div)是否在单击时呈现。
注意:我不允许从Enzyme引入浅层方法或使用除Jest、React测试库之外的任何其他测试框架。
如有任何建议,我们将不胜感激。

wsxa1bj1

wsxa1bj11#

为了测试组件,您需要呈现组件。然后访问按钮,在此之后模拟按钮单击,最后期望发生更改。
测试库有一个名为userEvent的函数,可以模拟按钮点击。

import { screen } from "@testing-library/react";
import userEvent from "@testing-library/user-event";

describe('Expand body button', async () => {
    it('should render OrderModuleBody when clicked', () => {
        // render your component
        render(<YourComponent />) 
        // access your button
        const button = screen.getByTestId('orderModuleHeaderButton') 
        // simulate button click
        userEvent.click(button); 

        // expect result
        await waitFor(() =>  
            expect(screen.getByText("Some content")).toBeInTheDocument();
       });
}

相关问题