开玩笑的模拟尺寸不变

Posted

技术标签:

【中文标题】开玩笑的模拟尺寸不变【英文标题】:Jest mock dimensions not changing 【发布时间】:2021-11-19 14:15:49 【问题描述】:

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

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

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

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

在测试设置宽度为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(因为我的测试用例失败了)。

我该如何解决?

【问题讨论】:

【参考方案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 以避免提升,这使我们可以在每个测试中而不是全局模拟维度。

【讨论】:

以上是关于开玩笑的模拟尺寸不变的主要内容,如果未能解决你的问题,请参考以下文章

使用OpenCV对图像进行两种平移操作(图像的尺寸变化与图像的尺寸不变)

xml 仅缩放视图内容的ViewGroup - 实际测量的尺寸保持不变

用于应用扩展的 IB 故事板:iPad 图标不存在、尺寸不变、方向不工作

java swing 怎么让图片大小随着窗口的缩放而缩放?为啥我插入的图片尺寸不变?

模拟post提交,保持session不变

图片在固定的宽高中不变形展示(访微信朋友圈图片展示)