javascript - 测试 react 加载组件

标签 javascript reactjs react-loadable react-testing-library

我无法测试我的 React使用 react-loadable 的组件.说,我有一个 Button组件,取决于它是否收到 icon Prop ,加载 Icon像这样的组件:

Button.js

const LoadableIcon =  Loadable({
  loader: () => import('./Icon'),
  loading: () => <div>Loading...</div>
})

function Button(props) {
  return (
    <button 
      onClick={props.onClick}>
      {props.icon &&
        <LoadableIcon name={props.icon} />}
      {props.children}
    </button>
  )
}

然而,当我测试这个组件时,Icon尚未加载,测试只找到 <div>Loading...</div>元素...

Button.test.js

import React from 'react'
import {render} from 'react-testing-library'

import Button from '../Button'


describe('Button', () => {
  it('renders icon correctly', () => {
    const {getByText} = render(
      <Button 
        icon='add' 
      />
    )
    expect(getByText('add')).toBeInTheDocument()
  })
}) 

有没有一种优雅的方法可以在不使用实际 setTimeout 的情况下处理这种情况?是吗?

最佳答案

所以,答案是阅读文档 - self 注意!基于docs的解决方案是以下内容:

describe('Button', () => {
  it('renders icon correctly', async () => {
    const {getByText} = render(
      <Button 
        icon='add' 
      />
    )
    const icon = await waitForElement(() => getByText('add'))
    expect(icon).toBeInTheDocument()
  })
})

另外,注意async需要和await一起使用。

关于javascript - 测试 react 加载组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51837887/

相关文章:

php - 某些幻灯片在 Firefox 中不起作用 - Wordpress Revolution Slider

reactjs - 有没有办法在 React-Bootstrap 中设置自定义断点

reactjs - 微前端基于 React/Component 的拆分

reactjs - react : Loadable is not working?

Javascript将对象值分配给新对象

javascript - 为什么在 Vue.js 中对 src 链接使用字符串插值时不显示我的图像?

javascript - 如果有多个复选框,为什么只有一个复选框起作用

reactjs - Material UI - 在 ListItemText 中设置文本样式

javascript - 如何将数据作为导航 Prop 传递(不起作用)?

reactjs - fullcalendar - NextJS - 动态导入不显示日历