React Native 使用jest中的模拟将@gorhom/portal中的门户设置为视图

eqzww0vc  于 2023-02-09  发布在  React
关注(0)|答案(1)|浏览(205)

我想使用jest组件@gorhom/portal作为视图进行模拟。
我想这样做,因为<Portal />组件需要在应用程序的根<PortalProvider />。但我想测试单个屏幕。
这是我做的模拟:

import { jest } from '@jest/globals'

jest.mock('@gorhom/portal', () => {
  const react = require('react-native')

  return {
    __esModule: true,
    Portal: () => react.View,
    usePortal: jest.fn(),
  }
})

这是我正在做的测试

import React from 'react'

import renderer from 'react-test-renderer'

import ViewWithPortal from 'screens/ViewWithPortal'

test('renders correctly', () => {
  expect(true).toBeTruthy()

  const tree = renderer.create(<ViewWithPortal />).toJSON()
  expect(tree).toMatchSnapshot()
})

但当我调用测试屏幕时,出现以下错误:

'PortalDispatchContext' cannot be null, please add 'PortalProvider' to the root component.

       7 |
       8 | test('renders correctly', () => {
    >  9 |   const tree = renderer.create(<CreateAccount />).toJSON()
         |                         ^
      10 |   expect(tree).toMatchSnapshot()
      11 | })
      12 |

导致此问题的组件是:

const ViewWithPortal = () => {

  ...

  return (
    <Portal>
      <BottomSheet>
        {...}
      </BottomSheet>
    </Portal>
  )
}

如果你有什么建议!

qni6mghb

qni6mghb1#

问题似乎出在jest上,它没有选取模拟文件的路径。请检查此路径是否已添加到模拟路径中,或者您是否在正确的目录中运行测试。

相关问题