在 React 17 更新中,不再需要显式包含import React from 'react';在 React 组件中。我们希望利用该功能,因此我们从源代码中删除了所有 React 导入。
然而,这破坏了我们用于应用程序的笑话快照测试,从而触发错误:\nReferenceError: React is not defined
我想知道这个问题是否有任何解决方法。
\n这是我们正在使用的一个笑话快照测试示例:
\nimport { Provider } from 'react-redux';\nimport renderer from 'react-test-renderer';\nimport { applyMiddleware, createStore } from 'redux';\nimport { createEpicMiddleware } from 'redux-observable';\n\nimport { Price } from '../../../app/components/common/Price';\nimport rootReducer from '../../../app/ducks/rootReducer';\n\nconst epicMiddleware = createEpicMiddleware();\nconst store = createStore(\n rootReducer, applyMiddleware(epicMiddleware)\n);\n\nconst price = 100;\ndescribe('<Price> Component test', () => {\n it('should match snapshot', () => {\n const tree = renderer.create(\n <Provider store={store}>\n <Price price={price} currencyKey="\xe2\x82\xac">{price}</Price>\n </Provider>\n );\n expect(tree).toMatchSnapshot();\n });\n});\n\nRun Code Online (Sandbox Code Playgroud)\n它的主要组成部分:
\nimport { useSelector } from 'react-redux';\n\nimport Text from 'app/components/common/Text';\n\nimport { CurrencyFormatter } from 'app/services/common/js-price-formatter';\n\nexport const Price = ({ style, price, currencyKey }) => {\n const country = useSelector(state => state.locale.get('country'));\n const currencyFormatter = CurrencyFormatter.forCountry(country);\n return <Text style={style} label={currencyFormatter.format(price, currencyKey)} />;\n};\n\nexport default Price;\nRun Code Online (Sandbox Code Playgroud)\n这是摘录package.json
{\n "dependencies": {\n "react": "17.0.2",\n ...\n },\n "devDependencies": {\n "babel-jest": "^26.6.3",\n "jest": "^26.6.3",\n "jest-circus": "^26.6.3",\n "react-dom": "17.0.2",\n "react-test-renderer": "17.0.2",\n ...\n },\n}\nRun Code Online (Sandbox Code Playgroud)\n
小智 9
我也遇到过这个问题一段时间,但通过添加runtime: "automatic"babel.config.js 解决了这个问题(参考:https ://github.com/testing-library/react-testing-library/issues/810#issuecomment-718596241 )
我的babel.config.js现在是这样的:
module.exports = {
presets: [["@babel/preset-env"], ["@babel/preset-react", { runtime: "automatic" }]],
};
Run Code Online (Sandbox Code Playgroud)
希望可以帮助其他遇到这种情况的人。
| 归档时间: |
|
| 查看次数: |
1855 次 |
| 最近记录: |