【问题标题】:enzyme wrapper.instance() is null for connected component连接组件的酶 wrapper.instance() 为空
【发布时间】:2023-03-03 23:39:01
【问题描述】:

我正在尝试测试一个连接的反应组件,但是一旦包装它,我无法使用 instance() 获取它的实例,它返回 null。对于非连接组件,它确实返回实例,有什么区别?如何获取连接组件的实例?

it('connected component', () => {
  const wrapper = mount(
    <Provider store={store}>
      <BrowserRouter>
        <ConnectedComponent />
      </BrowserRouter>
    </Provider>
  )
  const myComp = wrapper.find(ConnectedComponent)
  expect(myComp).toHaveLength(1) // passes
  console.log(myComp.instance()) //null

})

it('non-connected component', () => {
  const wrapper = mount(
    <Provider store={store}>
      <BrowserRouter>
        <NonConnectedComponent />
      </BrowserRouter>
    </Provider>
  )
  const myComp = wrapper.find(NonConnectedComponent)
  expect(myComp).toHaveLength(1) // passes
  console.log(myComp.instance()) // prints the instancce
})

【问题讨论】:

  • 你试过用dive()而不是instance()吗?
  • 我得到 myComp.dive 不是一个函数,在这里也找不到 ReactWrapper api 中的潜水函数:github.com/airbnb/enzyme/blob/master/docs/api/mount.md
  • 也许这个问题可以帮到你github.com/airbnb/enzyme/issues/1002
  • 我在打开这个主题之前阅读了它,无论如何谢谢
  • 您是否尝试过通过名称而不是变量本身来获取它? const myComp = wrapper.find('NonConnectedComponent')(注意名称周围的引号)。不是最漂亮的解决方案,但如果可行,则适合解决方法。

标签: reactjs jestjs enzyme


【解决方案1】:

问题在于,对于连接的组件,您导出的是 Connect 包装器,而不是组件本身。有几个选项可以处理它。

选项 1. 使用 dive()。请注意,这仅在您使用 shallow 渲染时可用,在 mount 上不可用。

const component = shallow(<ConnectedComponent />).dive(); // dive one level into the Connect wrapper
component.instance(); // the instance will be available

选项 2. 在连接之前单独导出组件并使用命名导入来获取它。

// in your component
export class MyComponent extends React.Component {
  ...
}

export default connect()(MyComponent);

// in your tests
import { MyComponent } from './component'; // this will get you non-default export of the component, which is not connected

【讨论】:

  • dive() 不适用于 React.Fragment:TypeError: ShallowWrapper::dive() can only be called on components
  • 当有多个孩子时使用shallow()
猜你喜欢
  • 2018-08-25
  • 2018-09-13
  • 2019-08-01
  • 2020-10-11
  • 1970-01-01
  • 2018-01-30
  • 2017-11-19
  • 2019-09-26
  • 2019-11-22
相关资源
最近更新 更多