当前位置: 首页 > 知识库问答 >
问题:

使用Jest模拟具有其他组件作为属性的组件

胡承悦
2023-03-14

我正在尝试模拟react bootstrap

下面是一个使用

// mymodal.js

import React from 'react'
import {Modal, Button} from 'react-bootstrap'

const MyModal = ({ visible, hide, title, onOk }) =>
  <Modal show={visible} onHide={hide}>
    <div className='simple-modal'>
      <Modal.Header closeButton>{title}</Modal.Header>
      <Modal.Body>
        <div>I'm body</div>
      </Modal.Body>
      <Modal.Footer>
        <Button className='invert-primary' onClick={hide}>
          Cancel
        </Button>
        <Button bsStyle='primary' onClick={onOk}>
          Ok
        </Button>
      </Modal.Footer>
    </div>
  </Modal>

export default MyModal

下面是它的基本快照测试:

// mymodal.test.js

import renderer from 'react-test-renderer'
import * as React from 'react'
import MyModal from './mymodal'

jest.mock('react-bootstrap', () => {
  function Modal(props) {
    return <div>{props.children}</div>
  }
  Modal.Header = 'Modal.Header'
  Modal.Body = 'Modal.Body'
  Modal.Footer = 'Modal.Footer'

  return({
    Modal: Modal,
    Button: 'Button',
  })
})

describe('MyModal component', () => {
  test('should render a modal', () => {
    const modal = renderer.create(<MyModal
      visible={true}
      hide={() => ''}
      onOk={() => ''}
      title='Title' />)
    expect(modal.toJSON()).toMatchSnapshot()
  })
})

下面是快照:

    // Jest Snapshot v1

    exports[`MyModal component should render a modal 1`] = `
    <div>
      <div
        className="simple-modal"
      >
        <Modal.Header
          closeButton={true}
        >
          Title
        </Modal.Header>
        <Modal.Body>
          <div>
            I'm body
          </div>
        </Modal.Body>
        <Modal.Footer>
          <Button
            className="invert-primary"
            onClick={[Function]}
          >
            Cancel
          </Button>
          <Button
            bsStyle="primary"
            onClick={[Function]}
          >
            Ok
          </Button>
        </Modal.Footer>
      </div>
    </div>
    `;

我对快照结果很满意,但是我想为获得更好的输出

如何通过模仿来实现这一点?


共有1个答案

濮景龙
2023-03-14

我找不到通过开玩笑来达到这个目的的方法。最后,我使用了Ezyme浅层渲染,它处理基本的开箱模拟。为了进行spanshot匹配,我使用enzyme-To-jsonnpm包序列化了酶包装。

 类似资料:
  • 问题内容: 我有一个React组件,其中包含一些其他组件,这些组件依赖于对Redux存储等的访问,这会在执行完整的酶安装时引起问题。假设这样的结构: 我想使用Jest的方法来模拟子组件,因此测试无需担心。 我知道我可以通过以下方式模拟出一个简单的组件: 但是,由于该组件通常会接收道具,因此React会感到不安,并发出有关将未知道具(在本例中为)传递给的警告。 我试图返回一个函数,但是由于悬挂了,所

  • 假设我们有两个路由:和 根容器(装载时)检查是否存在,如果存在,则从API获取数据并填充。否则,相关的将保持为空。 此对象被发送到具有以下内容的子组件: 我现在遇到的问题是,当我发送一个空对象时,没有任何渲染。这个问题与空对象有关吗?据我所知,属性可以像这样在Vue中动态添加。 如果您需要更多信息,请询问!

  • 问题内容: 我正在使用ref为组件编写测试。我想模拟ref元素并更改一些属性,但不知道如何做。有什么建议? 问题答案: 根据https://github.com/airbnb/enzyme/issues/1937中的讨论,这就是解决方案 可以使用非箭头函数对类进行猴子修补,其中“ this”关键字将传递到正确的作用域。

  • 我看了已经问过的问题,但没有一个能够解决我的问题。 < code > https://stack overflow . com/questions/45534187/path-and-formdata-parameter-at-same-time < code > https://stack overflow . com/questions/50562971/swagger-editor-show

  • 我是个新手,在理解组件的生命周期时遇到了一些困难。 我现在有一个导航栏和导航按钮组件,我希望每个导航按钮触发不同的东西。我不想更改页面,我想在同一页面中显示更多组件。 我有我的按钮设置,所以我可以做下面的。 在这种情况下,我是否可以说,在DOM的其他地方创建/显示不同的组件?