Jest-Expo 在示例上崩溃(React.createElement:类型无效 - 应为字符串)

Posted

技术标签:

【中文标题】Jest-Expo 在示例上崩溃(React.createElement:类型无效 - 应为字符串)【英文标题】:Jest-Expo crashes on example (React.createElement: type is invalid -- expected a string) 【发布时间】:2021-04-09 11:33:10 【问题描述】:

我很困惑为什么示例测试没有运行。我在这里使用带有打字稿的 Expo Web。我的前端使用expo start --web 运行良好。

// App.tsx
const App = () => 
  return (
    <View>
       <Text>Hello world</Text>
    </View>
  );


export default App;

我按照the expo-jest docs的示例测试

// App.test.js
import React from 'react';
import renderer from 'react-test-renderer';

import App from '../App'; // <-- only changed path to match my folder structure

describe('<App />', () => 
    it('has 1 child', () => 
        const tree = renderer.create(<App />).toJSON();
        expect(tree.children.length).toBe(1);
    );
);

但是,当我运行 npm test 时,我得到了

const tree = renderer.create(<App />).toJSON();
                               ^
React.createElement: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: object.

我知道这是关于大多数时候将默认导出与命名导出混合,但我很清楚使用默认导出和导入。我做错了什么?

【问题讨论】:

【参考方案1】:

您可能在包含App.tsx 的目录中有app.json 文件。默认情况下,Jest 尝试导入 app.json 而不是 App.tsx

配置 Jest 的 moduleFileExtensions 并将 tsx 放在左侧。

"moduleFileExtensions": ["tsx", ...]

【讨论】:

理想情况下,expo typescript jest 设置可以开箱即用。为了可见性,这里是相关的世博会文档 PR:github.com/expo/expo/pull/11580

以上是关于Jest-Expo 在示例上崩溃(React.createElement:类型无效 - 应为字符串)的主要内容,如果未能解决你的问题,请参考以下文章

Jest-expo 测试不运行

react-native-vector-icons/MaterialIcons jest-expo 快照测试错误与打字稿

为啥“draggable = 'true'”不能在 React 渲染组件上工作?

presentViewController 在 iPad 上崩溃,但在 iPhone 上不崩溃

WebSocket 聊天异步示例崩溃

Agora Android 示例应用在启动时崩溃