【发布时间】:2018-03-06 06:56:57
【问题描述】:
我正在尝试使用酶浅渲染对组件进行单元测试。尝试测试组件的状态 activeTab 并抛出 TypeError: Cannot read property state。我的组件手风琴。手风琴组件jsx代码
class Accordion extends Component {
constructor(props) {
super(props)
this.state = {
activeTab: 0
}
}
static defaultProps = {
tabs: [{title: 'Status'}, {title: 'Movement'}]
}
render() {
const { tabs } = this.props
, { activeTab } = this.state
return (
<div className={`accordion`}>
{tabs.map((t, i) => {
const activeClass = activeTab === i ? `accordion--tab__active` : ''
return(
<section key={i} className={`accordion--tab ${activeClass}`}>
<header className={`accordion--header`}>
<h4 className={`accordion--title`}>
<button onClick={() => {this._selectAccordion(i)}}>{t.title}</button>
</h4>
</header>
<div className="accordion--content">
{t.title}
Content
</div>
</section>
)
})}
</div>
)
}
_selectAccordion = activeTab => {this.setState({activeTab})}
}
export default Accordion
和Accordion.react.test.js
import { shallow } from 'enzyme'
import Accordion from './components/Accordion'
test('Accordion component', () => {
const component = shallow(<Accordion name={`Main`}/>)
expect(component.state('activeTab')).equals(0)
})
【问题讨论】:
-
测试在我的电脑上运行良好,但我必须将
.equals(0)更改为.toEqual(0)。也许您可以分享更多调试信息,例如酶/节点版本,或者至少粘贴完整的错误消息 - 您粘贴的肯定只是消息的一半。 -
你在 Jsx 文件中导入了 REACT 吗?
-
是的,我在
jsx文件中导入 React。 -
你说的是
jsx文件,但是在Accordian.react.test.js中你是import Accordion from './components/Accordion.js,这是一个js文件而不是jsx文件。你确定文件扩展名是正确的吗?无论如何,您不需要将文件扩展名放在文件路径中。 -
这是一个错误,我已经修复了它,但在我的实际项目中它只是
Accordion
标签: javascript reactjs enzyme jestjs