似乎每个人和他们的母亲都在解决这个问题。我从所有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',
};
答案 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-native
。 Keeping it may also cause a problem.
答案 1 :(得分:0)
我认为,问题正在打开和关闭。您可以尝试按以下方式编辑代码吗?
didDrawCell