javascript - 使用 React Suspense 和 React.lazy 子组件进行 Jest/Enzyme 类组件测试

标签 javascript reactjs testing jestjs enzyme

因此,我将类组件中使用的导入转换为 React.lazy import api 并将其包装在 Suspense 标记中。当我测试该类组件时, enzyme 会抛出错误 "Enzyme Internal Error: unknown node with tag 13" .有没有办法渲染和测试延迟加载组件的安装,而不是使用浅渲染?

我已经尝试过 async await 来等待延迟加载的 promise 得到解决,但这也不起作用,如下所示:

it('async await mount', () async () => {
  const wrapper = await mount(<Component />)
}

这是示例代码:

组件.js
import React, { PureComponent, Suspense } from 'react'

const ChildComponent = React.lazy(() => import('../ChildComponent'))

export default class Component extends PureComponent {
  constructor() {
      super()
      this.state = {
          example: null
      }
  }

  doSomething = () => this.setState({
      example: 'example'
  })

  render() {
    return (
      <div>
        <p>Example</p>
        <Suspense fallback={<div>...loading</div>}>
            <ChildComponent 
               example={this.state.example}
               doSomething={this.doSomething}
            />
        </Suspense>
      </div>
    )
  }
}

组件.test.js
import React from 'react'
import renderer from 'react-test-renderer'
import { mount } from 'enzyme'
import Component from '../../Component'

describe('Component', () => {
    // snapshot renders loading and not children
    it('example snapshot of tree', () => {
        const tree = renderer.create(<Component />).toJSON()
        expect(tree).toMatchSnapshot()
    })

    it('example mount test', () => {
        // this test fails and throws error I state above
        const wrapper = mount(<Component />)
        wrapper.setState({ example: 'example' })
        expect(wrapper.state.example).toBe('example')
    })
})

我读到 Enzyme 还不支持 React 16.6 Suspense API,但我想知道是否还有一种方法可以测试挂载的,所以我可以使用像 simulate 这样的东西和 find来自 enzyme 的 API。

最佳答案

解决方案
ChuckJHardy 链接的 GitHub 问题已解决合并并发布。从 1.14.0 开始,您现在可以在 enzyme 中使用 mount API。
引用
https://github.com/airbnb/enzyme/pull/1975

关于javascript - 使用 React Suspense 和 React.lazy 子组件进行 Jest/Enzyme 类组件测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53768864/

相关文章:

javascript - ./index.js 中的错误模块构建失败 : SyntaxError: Unexpected token

安卓测试框架

python - 用补丁模拟两个函数以进行单元测试

testing - 如何使用 gradle 命令行运行多个测试运行程序类

javascript - 更改元素的 outerHTML 会将其从数组中移除

php - PHP 中的 JavaScript

javascript - 从 ajax 调用访问 PHP 函数

javascript - 如何在 react 中用左右箭头滑动多个图像?

javascript - 为什么 ES6 ComputedPropertyName 不适用于此 React js 代码?

reactjs - 如何使用 React 功能组件在 CanvasJS 中实现动态更新动画?