2

我不是对 fetch 函数进行单元测试,所以即使像jest-fetch-mock这样的库也无助于摆脱错误。既不axios也不isomorphic-fetch

运行会yarn test产生这个。

在此处输入图像描述App.test.js根本没有测试获取:

import React from 'react'
import renderer from 'react-test-renderer'
import App from './App'

it('renders without crashing', () => {
  const rendered = renderer.create(<App />).toJSON()
  expect(rendered).toBeTruthy()
})

类似于: *错误:无法读取属性获取。使用 jest-expo 和 react native(可能是重复的,但问题没有详细说明) * Jest throwing TypeError: Cannot read property 'fetch' of undefined

我的屏幕中有一个 fetch 方法(不在我的测试中)。请注意,无论我是否评论/使用我的 fetch 函数,都会发生上述错误。

我怀疑这与我的 babel 或 jest 配置有关。

上面的错误发生在我的.babelrc下面。改变.babelrc

   {
     "presets": ["babel-preset-expo", "react-native", "es2015", "react-native-dotenv"],
     "env": {
     "development": {
       "plugins": ["transform-react-jsx-source","module-resolver"]
      }
     }
    }

通过删除“es2015”预设会导致另一个错误。请注意,即使没有babel-preset-es2015devDependency,也会发生这种情况。

({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,global,jest){�PNG                                                                                             
^
  SyntaxError: Invalid or unexpected token

  at ScriptTransformer._transformAndBuildScript (node_modules/jest-runtime/build/script_transformer.js:318:17)
  at Object.<anonymous> (node_modules/react-navigation/src/views/Header/HeaderBackButton.js:92:223)

我正在使用yarn 1.3.2& ubuntu 17.04& Node v9.5.0&create-react-native-app version: 1.0.0

我的应用组件:

   import React, { Component } from 'react'
   import {
      TouchableHighlight,
      Text,
      View,
      AsyncStorage
   } from 'react-native'

class App extends Component {
  constructor(props) {
    super(props)
    this.state = {
      data: null
    }
  }
  componentWillMount() {
    this.setState({
      loading: true
    }, this._getData)
  }
  _getData = () => {
      fetch('localhost:1212')
      .then(() => {
        this.setState({
          data: data,
        })
      })
      .catch((error) => {
        alert('There was an error fetching the secret info.')
      })
      .done()
    }
  _renderData = () => (
    <Text>You are seeing</Text>
  )
  render() {
    return (
      <View >
        {
          <Text>
            {this.state.secret ? this._renderData() : <Text>Nothing to See</Text>}
          </Text>
        }
      </View>
    )
  }
}

export default App
4

0 回答 0