Fil*_*čić 5 jestjs react-native
我在尝试使用react-native-safe-area-context测试组件时遇到问题,
测试文件:
import _ from "lodash"
import React from "react"
import mockSafeAreaContext from "react-native-safe-area-context/jest/mock"
import renderer from "react-test-renderer"
import CeoHeader from "../../src/screens/assessment/board/ceo_review/header"
jest.mock("react-native-safe-area-context", () => mockSafeAreaContext)
let props
beforeEach(() => {
props = {
onBack: jest.fn(),
firstOrLastPage: _.sample([true, false]),
onRefresh: jest.fn(),
}
})
describe("<CeoHeader />", () => {
it("has 1 child", () => {
const tree = renderer.create(<CeoHeader {...props} />).toJSON()
expect(tree.children).toHaveLength(1)
})
})
Run Code Online (Sandbox Code Playgroud)
错误:
SafeAreaProvider 呈现在应用程序顶部
<Root>
<LoadingOverlay loading={loadingRdirectAction} />
<SafeAreaProvider
initialMetrics={{
frame: { x: 0, y: 0, width: 0, height: 0 },
insets: { top: 0, left: 0, right: 0, bottom: 0 },
}}
>
<AppNavigator />
</SafeAreaProvider>
</Root>
Run Code Online (Sandbox Code Playgroud)
zac*_*ify 15
这是一种更简单的模拟方法。图书馆的文档中对此进行了描述:
import mockSafeAreaContext from 'react-native-safe-area-context/jest/mock';
jest.mock('react-native-safe-area-context', () => mockSafeAreaContext);
Run Code Online (Sandbox Code Playgroud)
将其放入您的测试或玩笑设置文件中。
Mat*_*ara 10
在这里找到了解决方案:
https://github.com/th3rdwave/react-native-safe-area-context/issues/31
这对我来说是这样的:
jest.mock('react-native-safe-area-context', () => {
const inset = { top: 0, right: 0, bottom: 0, left: 0 }
return {
SafeAreaProvider: jest.fn().mockImplementation(({ children }) => children),
SafeAreaConsumer: jest
.fn()
.mockImplementation(({ children }) => children(inset)),
useSafeAreaInsets: jest.fn().mockImplementation(() => inset),
}
})
Run Code Online (Sandbox Code Playgroud)
react-native-safe-area-context
正确模拟的步骤
mockSafeAreaContext.tsx
import React from 'react';
const MOCK_INITIAL_METRICS = {
frame: {
width: 320,
height: 640,
x: 0,
y: 0,
},
insets: {
left: 0,
right: 0,
bottom: 0,
top: 0,
},
};
const RNSafeAreaContext = jest.requireActual('react-native-safe-area-context');
export default {
...RNSafeAreaContext,
initialWindowMetrics: MOCK_INITIAL_METRICS,
SafeAreaProvider: ({ children, initialMetrics }) => {
return (
<RNSafeAreaContext.SafeAreaFrameContext.Provider
value={initialMetrics?.frame ?? MOCK_INITIAL_METRICS.frame}>
<RNSafeAreaContext.SafeAreaInsetsContext.Provider
value={initialMetrics?.insets ?? MOCK_INITIAL_METRICS.insets}>
{children}
</RNSafeAreaContext.SafeAreaInsetsContext.Provider>
</RNSafeAreaContext.SafeAreaFrameContext.Provider>
);
},
useSafeAreaInsets: jest.fn, // add more hooks if needed
};
Run Code Online (Sandbox Code Playgroud)
import mockSafeAreaContext from 'created-file-path'
jest.mock('react-native-safe-area-context', () => mockSafeAreaContext);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6134 次 |
最近记录: |