Unit testing 如何测试componentDidMount中是否调用了特定的操作?
我在我的项目中使用Redux,测试堆栈的是Mocha、Chai和Sinon。在特定容器组件中,ABC的组件装载一个动作xyz。在ABC的单元测试中,我想检查是否调用了xyz。ABC的代码Unit testing 如何测试componentDidMount中是否调用了特定的操作?,unit-testing,reactjs,redux,mocha.js,sinon,Unit Testing,Reactjs,Redux,Mocha.js,Sinon,我在我的项目中使用Redux,测试堆栈的是Mocha、Chai和Sinon。在特定容器组件中,ABC的组件装载一个动作xyz。在ABC的单元测试中,我想检查是否调用了xyz。ABC的代码 import {xyz} from 'action'; class ABC extends React.Component { componentDidMount(){ // some other magic this.props.xyz(); } render(){ //
import {xyz} from 'action';
class ABC extends React.Component {
componentDidMount(){
// some other magic
this.props.xyz();
}
render(){
// return html
}
}
function mapDispatchToProps(dispatch) {
return bindActionCreators({xyz});
}
export default connect(mapStateToProps, mapDispatchToProps)(ABC)
检查是否从失败的componentDidMount调用xyz的单元测试
import {xyz} from 'path to xyz action';
import {ABC} from 'path to ABC';
import {Provider} from 'react-redux'
describe('ABC', function () {
it('renders correctly', function () {
let store = {} // fake store object
let actionSpy = sinon.spy(xyz);
let wrapper = mount(
<Provider store={store}
<ABC/>
</Provider>);
actionSpy.should.have.callCount(1);
});
});
从'path to xyz action'导入{xyz};
从'path to ABC'导入{ABC};
从“react redux”导入{Provider}
描述('ABC',功能(){
它('正确呈现',函数(){
let store={}//伪存储对象
设actionSpy=sinon.spy(xyz);
让包装器=装入(
好吧,假设您正在导入组件的未包装版本,那么您根本没有传递任何道具(商店没有向您的组件中注入道具)。因此,您应该将该间谍传递给您的组件:
mount(<ABC xyz={actionSpy} />);
mount();
之后应该可以用了!我试过了,它不起作用,我没有导入组件的未包装版本。我明白了,那么你什么也不导入,因为你有import{ABC}从'path to ABC';
这是一个命名的导入。如果您要导出未包装的组件,那么您可能会有更好的运气。无论如何,这是测试redux组件的一个好模式。有可能您正在导入已包装的组件,而存储正在覆盖您传递的道具。如何为已包装的组件执行此操作?请简短回答回答?你不能。包装的组件将直接通过绑定动作创建者,这意味着你不能在那里设置间谍。