玩笑,用酶测试同一子组件的多次出现

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了玩笑,用酶测试同一子组件的多次出现相关的知识,希望对你有一定的参考价值。

我正在尝试测试模拟内容在测试中是否正确显示。其中两个使用H2Tag组件,而另一个使用H1Tag组件。由于要测试两个不同的字符串,因此我无法正确进行H2Tag组件的测试。

是否有一种方法可以测试同一组件(使用不同的输入道具)是否多次出现?或者,是否有更好的方法来完成此测试?

我也在使用样式化组件,因此组件名称在debug()中显得略有不同。

const Partner = ({ content }) => {
  return (
      <ContentWrapper>
        <H1Tag>{content.headline}</H1Tag>
        <H4Tag>{content.heading1}</H4Tag>
        <H1Tag>{content.heading2}</H1Tag>
      </ContentWrapper>
  )
}
//Partner.test.js
import React from 'react'
import Partner, { H1Tag, H4Tag,} from '../SomePage'
import { shallow } from 'enzyme'

describe('Partner', function () {
  beforeAll(() => {
    this.mockContent = {
      headline: 'Partner',
      heading1: 'Hello',
      heading2:
        'ABC XYZ',
    }
  })

  beforeEach(() => {
    this.wrapper = shallow(
      <Partner content={this.mockContent} />
    )
  })

  describe('render', () => {
    it('shows H1Tags content', () => {
      const H1TagWrapper = this.wrapper.find(H1Tag)

      const { headline, heading2 } = this.mockContent
      // how to test two different elements?
      expect(H1TagWrapper.getElements()).toBe([headline, heading2]) //this fails
    })

    it('shows H4Tag content', () => {
      const H4TagWrapper = this.wrapper.find(H4Tag)
      expect(H4TagWrapper.text()).toEqual(this.mockContent.heading1) //this works
    })
  })
})

这是当前方法的预期/接收结果。

    expect(received).toBe(expected) // Object.is equality

    - Expected
    + Received

      Array [
    -   "Partner",
    -   "ABC XYZ",
    +   <ForwardRef(PartnerBanner__H1Tag)>
    +     Partner
    +   </ForwardRef(PartnerBanner__H1Tag)>,
    +   <ForwardRef(PartnerBanner__H1Tag)>
    +     ABC XYZ
    +   </ForwardRef(PartnerBanner__H1Tag)>,
答案

基于@Fanchen Bao的评论(非常感谢!):

如果要测试的子组件出现两次,则使用.first()和.last()将起作用。

如果子组件出现两次以上,例如5使用.at(0)... .at(4)也可以。

// these two are the same in this question's context
expect(H1TagWrapper.first().text()).toBe(headline) 
expect(H1TagWrapper.last().text()).toBe(heading2)

expect(H1TagWrapper.at(0).text()).toBe(headline)
expect(H1TagWrapper.at(0).text()).toBe(heading2)

以上是关于玩笑,用酶测试同一子组件的多次出现的主要内容,如果未能解决你的问题,请参考以下文章

当函数作为prop - React传递时,用酶调用函数

单元测试:用酶反应上下文 api 返回一个空对象

开玩笑:setTimeout 被调用了太多次

用酶浅渲染找不到元素

使用酶获取连接到 redux 的子组件的状态

为 vuex 开玩笑,测试同一动作的不同返回值