【发布时间】:2017-03-13 21:11:00
【问题描述】:
我发现 Jest 在测试我的 Redux React 应用程序时非常有用。但是,有很多关于如何测试异步操作创建者的示例,但我真的不知道如何对异步组件进行快照。
我想做的是类似于hovered link example from Facebook's own tutorial。他们调用一个道具函数 onMouseEnter() 并随后拍摄快照。如果 onMouseEnter() 调度使用 Redux Thunk 创建的异步操作,是否有一种简单的方法可以做到这一点?
这就是我的 thunk 的样子,它使用 axios。
// test-api.js
export function getLinkInfo() {
return function(dispatch) {
return axios.get('/api/get-link-info')
.then(response => {
dispatch(getLinkInfoSuccess(response.data));
return response;
});
};
}
我自己的 Link 组件来了。
import React from 'react';
import { connect } from 'react-redux';
import * as api from '../../api/test-api';
class Link extends React.Component {
render() {
return (
<a href='#' onMouseEnter={this.props.getLinkInfo}>
Hover me
</a>
<div>{this.props.linkInfo}</div>
);
}
}
const mapDispatchToProps = function(dispatch) {
return {
getLinkInfo: function() {
dispatch(api.getLinkInfo());
}
}
}
const mapStateToProps = function(store) {
return {
linkInfo: store.getIn(['testState', 'linkInfo'], "")
};
};
export default connect(mapStateToProps, mapDispatchToProps)(Link);
最后是测试文件。
import React from 'react';
import Link from '../link';
import renderer from 'react-test-renderer';
test('Link changes linkInfo when hovered', () => {
const component = renderer.create(
<Link></Link>
);
let tree = component.toJSON();
expect(tree).toMatchSnapshot();
// manually trigger the callback
tree.props.onMouseEnter();
// re-rendering
tree = component.toJSON();
expect(tree).toMatchSnapshot();
});
【问题讨论】:
标签: reactjs asynchronous redux jestjs