玩笑模拟尺寸没有改变

iRo*_*tia 4 testing typescript jestjs react-native react-native-testing-library

我是第一次进行测试,所以我非常确定我做错了什么。

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

const {width, height} = Dimensions.get('window')
Run Code Online (Sandbox Code Playgroud)

对于我的测试用例,我考虑的是 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 />)
 
Run Code Online (Sandbox Code Playgroud)

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

我该如何修复它?

jul*_*ves 5

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

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

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

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

jest.doMock使用而不是jest.mock避免提升,这使我们能够模拟每个测试的尺寸而不是全局的尺寸。