我正在使用react-test-renderer的渲染器对我的react组件进行单元测试。它工作正常,但是在使用ReactCssTransitionGroup之后,出现以下错误“ TypeError:无法读取未定义的属性'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();
});
});
答案 0 :(得分:2)
react-addons-css-transition-group
是一个旧软件包,以前是deprecated,而赞成react-transition-group
。
react-transition-group
的v1是一个临时替代品,但已在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
会引发您看到的错误。