javascript – jest,enzyme – 测试返回jsx的方法

前端之家收集整理的这篇文章主要介绍了javascript – jest,enzyme – 测试返回jsx的方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下组件:
  1. import React,{ Component } from 'react';
  2. import {Link,IndexLink} from 'react-router';
  3.  
  4. class Navbar extends Component {
  5.  
  6. renderLinks = (linksData) => {
  7. return linksData.map((linkData) => {
  8. if(linkData.to === '/') {
  9. return(
  10. <div className="navbar-link-container" key={linkData.to}>
  11. <IndexLink activeClassName="navbar-active-link" to={linkData.to}>
  12. <i className="navbar-icon material-icons">{linkData.icon}</i>
  13. <span className="navbar-link-text">{linkData.text}</span>
  14. </IndexLink>
  15. </div>
  16. )
  17. }
  18. else {
  19. return(
  20. <div className="navbar-link-container" key={linkData.to}>
  21. <Link activeClassName="navbar-active-link" to={linkData.to}>
  22. <i className="navbar-icon material-icons">{linkData.icon}</i>
  23. <span className="navbar-link-text">{linkData.text}</span>
  24. </Link>
  25. </div>
  26. )
  27. }
  28. })
  29. };
  30.  
  31. render() {
  32. return (
  33. <div className={`navbar navbar-${this.props.linksData.length}`}>
  34. {this.renderLinks(this.props.linksData)}
  35. </div>
  36. )
  37. }
  38. }
  39.  
  40. Navbar.propTypes = {
  41. linksData: React.PropTypes.array.isrequired,};
  42.  
  43. export default Navbar;

现在我正在尝试编写一个单元测试来检查if条件(根据.to属性返回IndexLink或Link):

但我似乎无法测试函数的确切jsx返回,因为当我在console.log中返回一个返回时我得到了这个:

{ ‘$$typeof’: Symbol(react.element),
type: ‘div’,
key: ‘/’,
ref: null,
props:
{ className: ‘navbar-link-container’,
children:
{ ‘$$typeof’: Symbol(react.element),
type: [Object],
key: null,
props: [Object],
_owner: null,
_store: {} } },
_store: {} }

这是我到目前为止所做的测试:

  1. it('renderLinks should return a IndexLink',() => {
  2. const wrapper = shallow(<Navbar linksData={mockLinksData}/>);
  3. const renderLinksReturn = wrapper.instance().renderLinks(mockLinksData);
  4. let foundIndexLink = false;
  5. renderLinksReturn.map((linkHtml) => {
  6. console.log(linkHtml);
  7. });
  8. expect(foundIndexLink).toBe(true);
  9. })

现在我不知道要测试什么来查看函数是否正确运行.有没有办法像组件一样“挂载”函数的返回?或者是否有一个简单的方法来返回我可以检查的实际返回的html字符串?

解决方法

我想你不需要打电话
  1. const renderLinksReturn = wrapper.instance().renderLinks(mockLinksData);

因为它将在渲染Navbar时被调用.

您的解决方案是正确的,但如果您想要一些其他可靠的方法来测试它.

由于此测试专门测试IndexLink并假设mockLinksData包含to =“/”

  1. it('renderLinks should return a IndexLink when passed a link with to:\"/\"',() => {
  2. const wrapper = shallow(<Navbar linksData={mockLinksData}/>);
  3.  
  4. // You can use both component name or component displayname
  5. // IndexLink or "IndexLink"
  6. expect(wrapper.find('IndexLink')).to.have.length(1);
  7.  
  8. // In case you want to test whether indexLink has appropriate props or classes.
  9. const indexLink = wrapper.find(IndexLink).first();
  10.  
  11. // Check whether indexLink has pass prop
  12. expect(indexLink.props().to).to.equal("/");
  13.  
  14. // Check whether indexLink has correct classes set.
  15. expect(indexLink.hasClass('navbar-active-link')).to.equal(true);
  16.  
  17. // Check whether indexLink displays the link test correctly
  18. expect(indexLink.find('navbar-link-text').text()).to.equal(mockLinksData.text);
  19.  
  20.  
  21. });

猜你在找的JavaScript相关文章