React.js 使用 Enzyme 和 Sinon 进行单元测试点击事件
React.js unit test click event with Enzyme and Sinon
我正在尝试将间谍附加到我的 React 组件上的点击事件。我正在使用 Enzyme with Mocha
和 Chai
但我无法通过以下测试:
it('Handles a Click Event', () => {
let rootId = Bigtree['rootId'];
const spy = sinon.spy();
const render = shallow(<EnvH tree={smalltree.objects}
node={smalltree.objects[rootId]} root={rootId}/>);
render.find('.toggler').simulate('click');
expect(spy.called).to.be.true;
});
这是我正在测试的组件:
class EnvH extends React.Component {
return (
<div className='top' key={Math.random()}>
<div className={'tableRow row'} id={node.id} style={rowStyle} key={Math.random()}>
<div style={nodeStyle} className={'root EnvHColumn ' + classNames(classObject)} key={Math.random()}>
//Here is the actual Click Item in question
<span className={'toggler'} onClick={this.toggleCollapseState.bind(this)}>{node.type} - {node.name}</span>
</div>
<ColumnContent columnType={'description'} nodeInfo={node.description} />
<ColumnContent columnType={'createdOn'} nodeInfo={node.createdAt} />
<ColumnContent columnType={'updatedOn'} nodeInfo={node.updatedAt} />
</div>
<div className={'Children'} style={childrenStyle} key={Math.random()}>
{childNodes}
</div>
</div>
);
点击 span 时调用的函数如下:
toggleCollapseState() {
this.setState({collapsed: !this.state.collapsed});
};
提前感谢您对此提供的任何帮助。我还应该提到测试没有通过,说明它期望为真但发现为假。
您的测试未通过,因为 spy
函数未提供给 span.toggler
元素,因此它从未被调用。
要使测试通过,您应该改为编写
sinon.spy(EnvH.prototype, 'toggleCollapseState')
然后是
expect(EnvH.prototype.toggleCollapseState.calledOnce).to.be.true
我正在尝试将间谍附加到我的 React 组件上的点击事件。我正在使用 Enzyme with Mocha
和 Chai
但我无法通过以下测试:
it('Handles a Click Event', () => {
let rootId = Bigtree['rootId'];
const spy = sinon.spy();
const render = shallow(<EnvH tree={smalltree.objects}
node={smalltree.objects[rootId]} root={rootId}/>);
render.find('.toggler').simulate('click');
expect(spy.called).to.be.true;
});
这是我正在测试的组件:
class EnvH extends React.Component {
return (
<div className='top' key={Math.random()}>
<div className={'tableRow row'} id={node.id} style={rowStyle} key={Math.random()}>
<div style={nodeStyle} className={'root EnvHColumn ' + classNames(classObject)} key={Math.random()}>
//Here is the actual Click Item in question
<span className={'toggler'} onClick={this.toggleCollapseState.bind(this)}>{node.type} - {node.name}</span>
</div>
<ColumnContent columnType={'description'} nodeInfo={node.description} />
<ColumnContent columnType={'createdOn'} nodeInfo={node.createdAt} />
<ColumnContent columnType={'updatedOn'} nodeInfo={node.updatedAt} />
</div>
<div className={'Children'} style={childrenStyle} key={Math.random()}>
{childNodes}
</div>
</div>
);
点击 span 时调用的函数如下:
toggleCollapseState() {
this.setState({collapsed: !this.state.collapsed});
};
提前感谢您对此提供的任何帮助。我还应该提到测试没有通过,说明它期望为真但发现为假。
您的测试未通过,因为 spy
函数未提供给 span.toggler
元素,因此它从未被调用。
要使测试通过,您应该改为编写
sinon.spy(EnvH.prototype, 'toggleCollapseState')
然后是
expect(EnvH.prototype.toggleCollapseState.calledOnce).to.be.true