JEST/酶类组件测试中的反应暂停和反应延迟子组件

Jest/Enzyme Class Component testing with React Suspense and React.lazy child component(JEST/酶类组件测试中的反应暂停和反应延迟子组件)
本文介绍了JEST/酶类组件测试中的反应暂停和反应延迟子组件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

因此,我将类组件中使用的导入转换为React.lazy导入API,并将其包装在一个挂起标记中。当我测试那个类组件时,酶抛出一个错误"Enzyme Internal Error: unknown node with tag 13"。是否有一种方法可以呈现和测试延迟加载组件的装载,而不是使用浅层呈现?

我已经尝试了异步等待,直到延迟加载的承诺解决,但也不起作用,如下所示:

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

以下是示例代码:

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>
    )
  }
}

Component.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')
    })
})

我读到酶还不支持Reaction 16.6 Suspense API,但我想知道是否还有方法测试挂载的,以便我可以使用酶的simulatefindAPI。

推荐答案

解决方案

ChuckJHardy链接的GitHub问题已解决、合并并发布。从1.14.0开始,您可以在酵素中使用挂载API。

引用

https://github.com/airbnb/enzyme/pull/1975

这篇关于JEST/酶类组件测试中的反应暂停和反应延迟子组件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Update another component when Formik form changes(当Formik表单更改时更新另一个组件)
Formik validation isSubmitting / isValidating not getting set to true(Formik验证正在提交/isValiating未设置为True)
React Validation Max Range Using Formik(使用Formik的Reaction验证最大范围)
Validation using Yup to check string or number length(使用YUP检查字符串或数字长度的验证)
Updating initialValues prop on Formik Form does not update input value(更新Formik表单上的初始值属性不会更新输入值)
password validation with yup and formik(使用YUP和Formick进行密码验证)