2

我是第一次做测试,所以我很确定我做错了什么。

我正在编写测试用例,我的组件在内部执行此操作。

const {width, height} = Dimensions.get('window')

对于我的测试用例,我正在考虑尺寸为 的 iPhone 11 width: 414, height:896,并且我希望在所有测试用例中保持一致。

750在测试设置宽度为和高度为时反应本机测试库1334

我想将其更改为 iPhone 11 尺寸,我在网上搜索并找到了jest.mock用于更改功能的文章。

所以我做了这样的事情

it('renders correctly', () => {
     jest.mock("Dimensions", () => ({
        get: jest.fn().mockReturnValue({ width: 414, height:896 }),
     }))
      
     const {getByTestId} = render(<Home />)
 

Home组件有console.log(width, height),但它仍然给出宽度为 750 和高度为 1334 (因为我的测试用例失败了)。

我该如何解决?

4

2 回答 2

1

如果您想Dimensions.get在每个测试的基础上模拟返回值,您可以使用jest.doMock.

const mockDimensions = ({ width, height }) => {
    jest.resetModules()
    jest.doMock('react-native/Libraries/Utilities/Dimensions', () => ({
        get: jest.fn().mockReturnValue({ width, height })
    }))
}

然后在测试开始时调用它,如下所示。

it('renders correctly', () => {
    mockDimensions({ width: 414, height: 896 })  
    const { getByTestId } = render(<Home />)
    // Your assertions
})

jest.doMock被用来代替jest.mock避免提升,这允许我们在每个测试而不是全局模拟维度。

于 2021-09-28T17:58:09.750 回答
0

这对我来说适用于 ios

import { Dimensions } from 'react-native';

 jest.spyOn(Dimensions, 'get').mockReturnValue({ width: 414, height: 818 });
于 2022-03-03T21:47:16.063 回答