Ошибка типа: невозможно прочитать свойство 'baseVal' из неопределенного - PullRequest
2 голосов
/ 27 марта 2019

Я тестирую свой компонент реагирования, используя рендерер реагирующего-тест-рендеринга. все работало нормально, но после использования ReactCssTransitionGroup я получаю следующую ошибку «Ошибка типа: не удается прочитать свойство« baseVal »из неопределенного». не уверен, как решить эту проблему

Я подтвердил, что эта проблема вызвана ReactCssTransitionGroup

Ниже находится мой файл компонента:

import React from 'react';
import PropTypes from 'prop-types';
import {List, ListItem, Spinner} from '@stores/reactCommon';
import ReactCSSTransitionGroup from 'react-addons-css-transition-group';

import BagListItem from './bag-list-item';

const BagList = ({bagList, loading}) => {
  const items = bagList.map((item, key) => (
    <ListItem key={key}>
      <BagListItem
        upc={item.upc}
        price={item.sellingPrice}
        description={item.description}
      />
    </ListItem>
  ));
  return (
    <div className="bag-list">
      {loading ? (
        <span className="bag-list__spinner">
          <Spinner size="extra-large" />
        </span>
      ) : null}
      <div className="bag-list__story-default-spacer">
        <List maxHeight="70vh">
          <ReactCSSTransitionGroup
            transitionName="bagList"
            transitionAppear={true}
            transitionAppearTimeout={500}
            transitionEnterTimeout={500}
            transitionLeaveTimeout={300}
          >
            {items}
          </ReactCSSTransitionGroup>
        </List>
      </div>
    </div>
  );
};

BagList.propTypes = {
  bagList: PropTypes.array.isRequired,
  loading: PropTypes.bool
};

export default BagList;

Ниже файл моего модульного теста

import React from 'react';
import renderer from 'react-test-renderer';
import BagList from '../../../../src/client/js/components/bag-list/bag-list';

describe('<BagList />', function() {
  this.items = [
    {
      upc: '123222123',
      sellingPrice: '12',
      description: 'this is a description'
    },
    {
      upc: '555123',
      price: '23',
      description: 'this is a description'
    }
  ];
  this.getComponent = items => {
    return <BagList bagList={items} loading={false} />;
  };

  it('Should render <BagList /> with bagList', () => {
    // this line is generating the error
    const items = renderer.create(this.getComponent(this.items)).toJSON();
    expect(items).toMatchSnapshot();
  });
});

1 Ответ

2 голосов
/ 27 марта 2019

react-addons-css-transition-group - это старый пакет, который устарел в пользу react-transition-group.

v1 из react-transition-group был заменой, но был переписан в v2.

Возможно, вы захотите перейти к CSSTransition из последних react-transition-group.


Сказав это,ошибка исходит из этого кода:

function hasClass(element, className) {
  if (element.classList) return !!className && element.classList.contains(className);else return (" " + (element.className.baseVal || element.className) + " ").indexOf(" " + className + " ") !== -1;
}

... в модуле hasClass.js из пакета dom-helpers, входящего в состав старого react-addons-css-transition-group.

react-test-renderer...

... предоставляет экспериментальный рендер React, который можно использовать для рендеринга компонентов React в чистые объекты JavaScript, вне зависимости от DOM или собственной мобильной среды

... так что он не реализует все, что предоставляется DOM.

В этом случае похоже, что react-test-renderer не обеспечивает реализацию classList на element, поэтому вызывается element.className.baseValвыдает ошибку, которую вы видите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...