【问题标题】:Testing a dropdown with Jest and React使用 Jest 和 React 测试下拉菜单
【发布时间】:2020-07-17 11:54:25
【问题描述】:

我目前正在使用 React 开发应用程序,但在编写测试时遇到问题。 我有这个下拉列表:

<DropdownButton variant="light" key={friend+"dropdown"} data-testid={friend+"dropdown"} title=""> 
   <Dropdown.Item target="_blank" href={friend} key={friend+"dropdownI1"} data-testid={friend+"dropdownI1"}>{t('manageFriends.viewProfile')}</Dropdown.Item>
   <Dropdown.Item onClick={(event) => deleteFriend(event,friend, webId)} key={friend+"dropdownI2"} data-testid={friend+"dropdownI2"}>{t('manageFriends.delete')}</Dropdown.Item>
   <Dropdown.Item onClick={(event) => viewRoutes(event,friend)} key={friend+"dropdownI3"} data-testid={friend+"dropdownI3"}>{t('manageFriends.viewRoutes')}</Dropdown.Item>
</DropdownButton>

我尝试测试一下,当您单击 DropdownButton 时,项目会出现:

test('Dropdown works', () =>{
  expect(getByTestId(friend+'dropdown')).toBeTruthy();
  fireEvent.click(getByTestId(friend+'dropdown'));
  expect(getByTestId(friend +'dropdownI1')).toBeTruthy();   
  expect(getByTestId(friend +'dropdownI2')).toBeTruthy();   
  expect(getByTestId(friend +'dropdownI3')).toBeTruthy();   
});

测试总是会找到 DropdownButton,但永远不会找到 Items。

我正在使用这两个库:react-testing-library 和 @testing-library/jest-dom/。我也在使用引导下拉菜单:

import DropdownButton from 'react-bootstrap/DropdownButton';

提前谢谢你。

【问题讨论】:

    标签: reactjs jestjs dropdown react-bootstrap


    【解决方案1】:

    按照步骤获取DropdownButton的项目:

    1. 为 DropdownButton 添加标题。 例如:
    <DropdownButton title="Friends" variant="light" key={friend+"dropdown"} data-testid={friend+"dropdown"} > 
       <Dropdown.Item target="_blank" href={friend} key={friend+"dropdownI1"} data-testid={friend+"dropdownI1"}>{t('manageFriends.viewProfile')}</Dropdown.Item>
       <Dropdown.Item onClick={(event) => deleteFriend(event,friend, webId)} key={friend+"dropdownI2"} data-testid={friend+"dropdownI2"}>{t('manageFriends.delete')}</Dropdown.Item>
       <Dropdown.Item onClick={(event) => viewRoutes(event,friend)} key={friend+"dropdownI3"} data-testid={friend+"dropdownI3"}>{t('manageFriends.viewRoutes')}</Dropdown.Item>
    </DropdownButton> 
    
    1. 根据 DropdownButton 的标题触发事件。
    fireEvent.click(screen.getByText("Friends"));
    

    瞧,你会得到物品清单。

    【讨论】:

      【解决方案2】:

      这里你的错误是测试文件中的朋友变量应该是一个你没有定义的字符串值,这就是为什么 data-testid dosent 的运行时值匹配。

      所以不要使用 freind,而是给它运行时存在的值。

      【讨论】:

      • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
      猜你喜欢
      • 2016-08-15
      • 2020-06-21
      • 2014-12-15
      • 2020-03-24
      • 2019-05-06
      • 2015-01-22
      • 1970-01-01
      • 2020-06-14
      • 2020-06-01
      相关资源
      最近更新 更多