Javascript 在React本机项目上运行jest时出错

Javascript 在React本机项目上运行jest时出错,javascript,react-native,jestjs,react-native-ios,Javascript,React Native,Jestjs,React Native Ios,在我的react原生项目上运行测试套件时,以下错误不断出现 /.../node_modules/@expo/react-native-action-sheet/ActionSheet.ios.js:3 import React from 'react'; ^^^^^ SyntaxError: Unexpected identifier at ScriptTransformer._transformAndBuildScript (node_modules/jest-runti

在我的react原生项目上运行测试套件时,以下错误不断出现

/.../node_modules/@expo/react-native-action-sheet/ActionSheet.ios.js:3
import React from 'react';
       ^^^^^

SyntaxError: Unexpected identifier

  at ScriptTransformer._transformAndBuildScript (node_modules/jest-runtime/build/script_transformer.js:403:17)
  at Object.<anonymous> (node_modules/@expo/react-native-action-sheet/index.js:1:45)
/…/node_modules/@expo/react native action sheet/ActionSheet.ios.js:3
从“React”导入React;
^^^^^
SyntaxError:意外的标识符
在ScriptTransformer.\u transformAndBuildScript(节点\u模块/jest运行时/build/script\u transformer.js:403:17)
反对。(node_modules/@expo/react native action sheet/index.js:1:45)
下面是使用的测试代码。这是一个简单的快照测试

//ContactList Tests
import React from 'react';
import renderer from 'react-test-renderer';
import ContactList from '../components/ContactList';


//ContactList Snapshot
test('renders correctly', () => {
    const tree = renderer.create(<ContactList />).toJSON();
    expect(tree).toMatchSnapshot();
  });
//联系人列表测试
从“React”导入React;
从“反应测试渲染器”导入渲染器;
从“../components/ContactList”导入联系人列表;
//联系人列表快照
测试('正确呈现',()=>{
const tree=renderer.create().toJSON();
expect(tree.toMatchSnapshot();
});
我正在运行react原生版本0.55.4和Jest版本23.6.0

我以前见过这种情况

发件人:

有时(特别是在React Native或TypeScript项目中)第三方模块以未翻译的形式发布。由于默认情况下不会转换节点_模块中的所有文件,Jest将无法理解这些模块中的代码,从而导致语法错误。为了克服这一问题,您可以使用transformIgnorePatterns将此类模块列入白名单。您将在中找到此用例的一个很好的示例

在他们提到的React Native指南中,您将从package.json中找到以下部分(这将嵌套在
jest
对象中):

这是一个具有负前瞻性的RegExp,因此它的意思是:在
节点_模块
中,任何没有紧接着
反应本机
我的项目
,或
反应本机按钮
的内容都将被忽略(不转换)

或者,为了简化这个双重否定,它将在
节点单元模块
中转换这三个包,而不是其他包

在您的情况下,此regexp可能如下所示:

"node_modules/(?!(react-native|@expo/react-native-action-sheet)/)"
这将允许传输
react native
@expo/react native action sheet
(我认为……您可能需要对其进行一些处理。可能有一些字符转义或一些其他包需要白名单)。

我以前见过这种情况

发件人:

有时(特别是在React Native或TypeScript项目中)第三方模块以未翻译的形式发布。由于默认情况下不会转换节点_模块中的所有文件,Jest将无法理解这些模块中的代码,从而导致语法错误。为了克服这一问题,您可以使用transformIgnorePatterns将此类模块列入白名单。您将在中找到此用例的一个很好的示例

在他们提到的React Native指南中,您将从package.json中找到以下部分(这将嵌套在
jest
对象中):

这是一个具有负前瞻性的RegExp,因此它的意思是:在
节点_模块
中,任何没有紧接着
反应本机
我的项目
,或
反应本机按钮
的内容都将被忽略(不转换)

或者,为了简化这个双重否定,它将在
节点单元模块
中转换这三个包,而不是其他包

在您的情况下,此regexp可能如下所示:

"node_modules/(?!(react-native|@expo/react-native-action-sheet)/)"

这将允许传输
react native
@expo/react native action sheet
(我认为…您可能需要对其进行一些处理。可能有一些字符转义或其他一些包需要白名单)。

您的babel配置是什么样的,在什么文件中它们是否位于?这是package.json“devdependences”中的babel配置:{“babel jest”:“23.6.0”,“babel preset react native”:“4.0.1”,“jest”:“^23.6.0”,“react test renderer”:“16.3.1”},我希望获得您的
.babelrc
babel.config.js
或类似文件的内容。抱歉,这是我的.babelrc文件{“预设”:[“react native”]}。您的babel配置看起来像什么,它们位于什么文件中?这是包中的babel配置。json“devdependences”:{“babel jest”:“23.6.0”,“babel preset react native”:“4.0.1”,“jest”:“^23.6.0”,“react test renderer”:“16.3.1”},我希望获得您的
.babelrc
babel.config.js
或类似文件的内容。很抱歉,这是我的.babelrc文件{“presets”:[“react native”},如果有帮助,这就是我目前在RN/expo项目中使用的模式:
“node_模块/(?!(react native | static container | expo |@expo | react导航))”
,我想这将涵盖您。(虽然您可能不需要
react导航
)以防有所帮助,但这正是我目前在RN/expo项目中使用的模式:
“节点模块/(?!(react native | static container | expo |@expo | react导航))”
,我认为这将涵盖您。(尽管您可能不需要
反应导航