加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

reactjs – Jest抛出TypeError:无法读取未定义的属性’fetch’

发布时间:2020-12-15 20:19:48 所属栏目:百科 来源:网络整理
导读:我正在尝试使用Jest在我的react / react-native库上运行一些测试(内部只有一些业务逻辑). 我们正在测试使用fetch函数的操作(使用whatwg-fetch进行polyfill). 我添加了whatwg-fetch(感谢Safari)的反应. 每当我尝试运行测试时,我都会收到此错误: TypeError: C
我正在尝试使用Jest在我的react / react-native库上运行一些测试(内部只有一些业务逻辑).

我们正在测试使用fetch函数的操作(使用whatwg-fetch进行polyfill).
我添加了whatwg-fetch(感谢Safari)的反应.

每当我尝试运行测试时,我都会收到此错误:

TypeError: Cannot read property 'fetch' of undefined

  at node_modules/whatwg-fetch/fetch.js:4:11
  at Object.<anonymous> (node_modules/whatwg-fetch/fetch.js:461:3)
  at Object.<anonymous> (node_modules/jest-expo/src/setup.js:138:416)

什么可能导致这个问题?在jest配置中有没有办法避免这种情况?

以下是一些用于调试的文件:

在package.json中进行Jest配置

"jest": {
"preset": "jest-expo","moduleFileExtensions": [
  "js","jsx","ts","tsx"
],"verbose": true,"transform": {
  "^.+.(js|ts|tsx)$": "<rootDir>/node_modules/babel-jest"
},"testRegex": "(/__tests__/.*|.(test|spec)).(ts|tsx|js)$","testPathIgnorePatterns": [
  ".snap$","<rootDir>/node_modules/","<rootDir>/dist/"
],"transformIgnorePatterns": [
  "node_modules/?!react-native"
]
},

Webpack配置:

const config = {
entry: [
    'whatwg-fetch',__dirname + '/src/index.ts',],devtool: 'source-map',output: {
    path: path.join(__dirname,'/dist'),filename: 'index.js',library: 'checkinatwork-module',libraryTarget: 'umd',umdNamedDefine: true,},module: {
    loaders: [
        { test: /.(tsx|ts)?$/,loader: 'ts-loader',exclude: /node_modules/ },resolve: {
    modules: [
        './src','node_modules',extensions: ['.js','.ts','.jsx','.tsx','json'],plugins: [
],};

测试文件:

import expect from 'expect';
import * as actions from '../../src/components/Checkin/checkin.action';
import * as reducers from '../../src/components/Checkin/checkin.reducer';
import configureMockStore from 'redux-mock-store';
import thunk from 'redux-thunk';
import nock from 'nock';

const middlewares = [ thunk ];
const mockStore = configureMockStore(middlewares);

describe('=> ADD CHECKIN ACTIONS',() => {
  describe('- REQUEST',() => {
    it('Action: ADD_CHECKIN_REQUEST should request addCawCheckin',() => {
      const expectedAction = {
        type: actions.ADD_CHECKIN_REQUEST,isFetching: true,};
      expect(actions.addCheckinRequest())
        .toEqual(expectedAction);
    });
    it('Reducer: newCheckin should trigger ADD_CHECKIN_REQUEST and initiate loading',() => {
      const expectedState = {
        isFetching: true,status: null,};
      expect(reducers.newCheckin(reducers.newCheckinDefaultState,actions.addCheckinRequest()))
        .toEqual(expectedState);
    });
  });

行动档案:

export const getCheckins = (sessionId,date,url,isRefresh) => {
  const config = {
    method: 'POST',headers: { 'Content-Type': 'application/json' },body: JSON.stringify({
      sessionId: {sessionId},date: {date},}),};

  return dispatch => {
    if (!isRefresh) {
      dispatch(getCheckinsRequest());
    }
    return fetch(url + 'getCAWCheckIns',config)
      .then(response => response.json())
      .then(({ checkins }) => {
        dispatch(getCheckinsSuccess(checkins));
      }).catch(err => {
        dispatch(getCheckinsError('Get checkins failed'));
        console.error('Get checkins failed: ',err);
      });
  };
};

谢谢!

解决方法

我在规范中做到了:

import { fetch } from 'whatwg-fetch';

global.fetch = fetch;

并且它与Jest一样有效.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读