在React Native + Typescript应用上运行Jest时出错(Jest遇到意外令牌)

时间:2019-05-26 12:22:59

标签: reactjs typescript react-native jestjs babel

似乎每个人和他们的母亲都在解决这个问题。我从所有SO问题和GH票证中尝试过的一切都无济于事。

实际上应该很简单,因为我的项目几乎是一个新的准系统项目。但是我仍然无法弄清楚我的一生到底有什么问题。

当我运行jest时:

/Desktop/Dropbox/Programming/iphone-app/fe/App.spec.tsx:11
    const tree = react_test_renderer_1.default.create(<App_1.default />).toJSON();
                                                      ^

SyntaxError: Unexpected token <

我的配置文件:

// jest.config.js

module.exports = {
  preset: 'ts-jest',
  testEnvironment: 'node',
};

-

// tsconfig.json

{
    "compilerOptions": {
        "allowJs": false,
        "allowSyntheticDefaultImports": true,
        "noFallthroughCasesInSwitch": true,
        "experimentalDecorators": true,
        "esModuleInterop": true,
        "isolatedModules": true,
        "jsx": "react-native",
        "lib": [
            "es6"
        ],
        "moduleResolution": "node",
        "noEmit": true,
        "strict": true,
        "target": "esnext"
    },
    "exclude": [
        "node_modules"
    ]
}

-

// babel.config.js

module.exports = function (api) {
    api.cache(true);
    return {
        presets: ['babel-preset-expo'],
    };
};

编辑#1

请注意,我尝试使用jest配置文件中的react-native预设,但没有成功(相同错误):

// jest.config.js

module.exports = {
    preset: 'react-native',
    transform: {
        '^.+\\.js$': '<rootDir>/node_modules/react-native/jest/preprocessor.js',
        '^.+\\.tsx?$': 'ts-jest'
    },
    globals: {
        'ts-jest': {
            tsConfig: 'tsconfig.json'
        }
    },
    testEnvironment: 'node',
};

2 个答案:

答案 0 :(得分:3)

它与此配置文件一起使用:

const { defaults } = require('jest-config');

module.exports = {
    preset: 'react-native',
    transform: {
        '^.+\\.js$': '<rootDir>/node_modules/react-native/jest/preprocessor.js',
        '^.+\\.tsx?$': 'ts-jest'
    },
    moduleFileExtensions: [
        'tsx',
        ...defaults.moduleFileExtensions
    ],
};

我需要添加

...
moduleFileExtensions: [
    'tsx',
    ...defaults.moduleFileExtensions
],
...

否则测试中的import App from './App';将解析为其他文件。通过在tsx选项中将moduleFileExtensions添加为最高优先级,该应用可以解析正确的文件。

还需要将jsx中的tsconfig.json编译器选项设置为"jsx": "react"。我不确定为什么还不能将其设置为react-native,但目前看来一切正常。

编辑

在新版本的'^.+\\.js$': '<rootDir>/node_modules/react-native/jest/preprocessor.js'中不需要

react-nativeKeeping it may also cause a problem.

答案 1 :(得分:0)

我认为,问题正在打开和关闭。您可以尝试按以下方式编辑代码吗?

didDrawCell