首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在react本机+类型记录应用程序上运行玩笑时出错(Jest遇到意外令牌)

在react本机+类型记录应用程序上运行玩笑时出错(Jest遇到意外令牌)
EN

Stack Overflow用户
提问于 2019-05-26 12:22:58
回答 2查看 1.1K关注 0票数 7

似乎每个人和他们的母亲都有不同的问题。从我试过的所有SO问题和GH的罚单上看,都没有什么效果。

实际上应该很简单,因为我的项目几乎是一个新的barebone项目。但我还是不知道我的生活出了什么问题。

当我运行jest

代码语言:javascript
复制
/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 <

我的配置文件:

代码语言:javascript
复制
// jest.config.js

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

-

代码语言:javascript
复制
// 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"
    ]
}

-

代码语言:javascript
复制
// babel.config.js

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

编辑#1

为了明确起见,我尝试在jest配置文件中使用react-native预置,但没有成功(同样的错误):

代码语言:javascript
复制
// 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',
};
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-15 11:23:28

它适用于此配置文件:

代码语言:javascript
复制
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
    ],
};

我需要补充一下

代码语言:javascript
复制
...
moduleFileExtensions: [
    'tsx',
    ...defaults.moduleFileExtensions
],
...

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

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

编辑

在较新版本的'^.+\\.js$': '<rootDir>/node_modules/react-native/jest/preprocessor.js'中不需要react-nativeKeeping it may also cause a problem.

票数 2
EN

Stack Overflow用户

发布于 2019-06-14 11:48:14

我认为,问题的开始和结束。您能试着按以下方式编辑您的代码吗?

代码语言:javascript
复制
import 'react-native'
import renderer from 'react-test-renderer'
import { App } from './app'
import React from 'react'

test('renders correctly', () => {
  const tree = renderer.create(
    <App />
  )
  expect(tree).toBeDefined()
})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56313474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档