简单jest测试中返回值无效

3

我正在测试React Native 0.68.2 / jest 29.0的Home组件视图。这个简单的测试用例是从jest文档中复制的:

import React from 'react';
import { NavigationContainer } from '@react-navigation/native';
import { render, cleanup, screen, fireEvent } from "@testing-library/react-native";
import App from '../App';

describe ('App ', () => {
    //afterEach(cleanup);
    test ('shall stack screens', async () => {
        const component = (<NavigationContainer>
                             <App />
                            </NavigationContainer>);
        const {getByText} = render(component);

        await waitFor(() => getByText('AppSplash'));
        

    })
})

这里是App.js文件:
 import React, {useState, useContext, Component} from 'react';
 import { NavigationContainer } from '@react-navigation/native';
 import { createStackNavigator } from '@react-navigation/stack';
 import { SafeAreaProvider } from 'react-native-safe-area-context';
 import SplashScreen from './src/components/splashscreen/SplashScreen';
 import SysError from './src/components/app/SysError';
 import Bye from "./src/components/app/Bye";
 import Verif1 from './src/components/signup/Verif1';
 import Signup from './src/components/signup/Signup';
 import TermCondition from './src/components/common/TermCondition';
 import AppScreen from "./src/components/app/AppScreen";

 
 const Stack = createStackNavigator();
 
 export default function App() {
   return (
    
     <SafeAreaProvider>
       <NavigationContainer>
         <Stack.Navigator InitialRouteName="AppSplash">
          <Stack.Screen name="AppSplash" component={SplashScreen} options={{headerShown:false}}/>
           <Stack.Screen name="AppSysError" component={SysError} options={{headerShown:false}} />
           <Stack.Screen name="AppScreen" component={AppScreen} options={{headerShown:false}} />
           <Stack.Screen name="AppVerif1" component={Verif1} options={{headerShown:false}} />
           <Stack.Screen name="AppSignup" component={Signup} options={{headerShown:false}} />
           <Stack.Screen name="TermCondition" component={TermCondition} options={{headerShown:false}} />
           <Stack.Screen name="Bye" component={Bye} options={{headerShown:false}} />
         </Stack.Navigator>
       </NavigationContainer>
     </SafeAreaProvider>
     
   );
 };

这是yarn jest的输出结果。

 Invalid return value:
      `process()` or/and `processAsync()` method of code transformer found at 
      "/Users/macair/Documents/code/js/xyz_app6/node_modules/react-native/jest/assetFileTransformer.js" 
      should return an object or a Promise resolving to an object. The object 
      must have `code` property with a string of processed code.
      This error may be caused by a breaking change in Jest 28:
      https://jestjs.io/docs/upgrading-to-jest28#transformer
      Code Transformation Documentation:
      https://jestjs.io/docs/code-transformation

我刚开始使用Jest,但没有找到解决这个错误的方案。
1个回答

8
process() or/and processAsync()方法在代码变换器中的错误说明问题是jest v28.x不支持react-native v68.x。您需要将其降级到jest v27.x或升级到react-native v70.x。

请参考react-native github上的此提交:https://github.com/facebook/react-native/commit/b5ff26b0b97d6cd600bdb9c33af866971ef14f9c

Jest 28删除了转换器的process方法中返回字符串的支持 (https://jestjs.io/docs/upgrading-to-jest28#transformer)。

这个PR将assetFileTransformer更改为返回一个对象而不是一个字符串。

上述提交是解决您遇到的问题的修复程序。它已经被合并了。如果您仔细查看提交信息,您会在下面找到与提交相关联的标签列表。这些标签将告诉您包含此提交的发布版本。

提交信息显示以下标签:

 v0.70.1  v0.70.0 v0.70.0-rc.4 v0.70.0-rc.3 v0.70.0-rc.2 v0.70.0-rc.1 v0.70.0-rc.0 latest

这些标签告诉我们,该提交首次进入了0.70版本的候选发布版,最终进入了0.70稳定版。它还存在于0.70.1稳定版中,正如您所期望的那样。
有关发布的更多信息,请参见https://reactnative.dev/contributing/release-faq 要么升级到React Native 70.x,要么将Jest降级到27.x。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接