У меня есть такой код:
function AppContainerAndroid() {
return <App />;
}
function AppContainerIOS() {
return (
<SafeAreaProvider testID="ios_area_provider">
<App />
</SafeAreaProvider>
);
}
function RenderProperContainer({renderProps}) {
return renderProps();
}
export default function AppContainer() {
return (
<RenderProperContainer
renderProps={() => {
if (Platform.OS === 'android') {
return <AppContainerAndroid />;
}
return <AppContainerIOS />;
}}
/>
);
}
и тест, который выглядит так.
it('should render android platform', () => {
setPlatform('android');
const {getByTestId} = render(<AppContainer />);
const element = getByTestId('ios_area_provider');
console.log(element);
});
Когда я запускаю тест, я получаю сообщение об ошибке:
Провел поиск, и в большинстве полученных ответов говорится, что это как-то связано с тем, как я возвращаю компонент. Похоже, что он не позволяет условный возврат, потому что я уже пробовал:
export default function AppContainer() {
if(Platform.OS === 'android') {
return <AppContainerAndroid />
}
return <AppContainerIOS />
}
и
export default function AppContainer() {
return Platform.OS === 'android' ? (
<AppContainerAndroid />
) : (
<AppContainerIOS />
);
}
и получил ту же ошибку. Есть ли способ справиться с таким сценарием?
ОБНОВЛЕНИЕ : это то, что внутри моего <App />
по какой-то причине где-то в моей навигации по реакции вызывает проблему, потому что <WrapWithProvider><View /></WrapWithProvider>
работает отлично, тест пройден.
function App() {
return (
<WrapWithProvider>
<NavigationContainer>
<Stack.Navigator>
<Stack.Screen>
{() => <View />}
</Stack.Screen>
</Stack.Navigator>
</NavigationContainer>
</WrapWithProvider>
);
}