UNPKG

enzyme

Version:

JavaScript Testing utilities for React

438 lines (437 loc) 14.6 kB
<!doctype html> <html lang="en"> <head> <title>Code coverage report for enzyme/src/react-compat.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../prettify.css" /> <link rel="stylesheet" href="../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../index.html">All files</a> / <a href="index.html">enzyme/src</a> react-compat.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">60.42% </span> <span class="quiet">Statements</span> <span class='fraction'>29/48</span> </div> <div class='fl pad1y space-right2'> <span class="strong">25% </span> <span class="quiet">Branches</span> <span class='fraction'>5/20</span> </div> <div class='fl pad1y space-right2'> <span class="strong">16.67% </span> <span class="quiet">Functions</span> <span class='fraction'>1/6</span> </div> <div class='fl pad1y space-right2'> <span class="strong">63.64% </span> <span class="quiet">Lines</span> <span class='fraction'>28/44</span> </div> </div> </div> <div class='status-line medium'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">1x</span> <span class="cline-any cline-yes">1x</span> <span class="cline-any cline-yes">1x</span> <span class="cline-any cline-yes">1x</span> <span class="cline-any cline-yes">1x</span> <span class="cline-any cline-yes">1x</span> <span class="cline-any cline-yes">1x</span> <span class="cline-any cline-yes">1x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">1x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">1x</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">1x</span> <span class="cline-any cline-yes">1x</span> <span class="cline-any cline-yes">1x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">106x</span> <span class="cline-any cline-yes">106x</span> <span class="cline-any cline-yes">106x</span> <span class="cline-any cline-yes">106x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">112x</span> <span class="cline-any cline-yes">79x</span> <span class="cline-any cline-yes">79x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">33x</span> <span class="cline-any cline-yes">33x</span> <span class="cline-any cline-yes">33x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">118x</span> <span class="cline-any cline-yes">79x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">39x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">1x</span> <span class="cline-any cline-yes">1x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/* eslint react/no-deprecated: 0 */ import { REACT013 } from './version'; &nbsp; let TestUtils; let createShallowRenderer; let renderToStaticMarkup; let renderIntoDocument; let findDOMNode; let React; let ReactContext; let childrenToArray; &nbsp; React = require('react'); &nbsp; <span class="missing-if-branch" title="if path not taken" >I</span>if (REACT013) <span class="cstat-no" title="statement not covered" ><span class="cstat-no" title="statement not covered" ><span class="cstat-no" title="statement not covered" ></span>{</span></span> <span class="cstat-no" title="statement not covered" > renderToStaticMarkup = R</span>eact.renderToStaticMarkup; /* eslint-disable react/no-deprecated */ findDOMNode = React.findDOMNode; /* eslint-enable react/no-deprecated */ TestUtils = require('react/addons').addons.TestUtils; <span class="cstat-no" title="statement not covered" > ReactContext = require('react/lib/ReactContext');</span> &nbsp; // Shallow rendering in 0.13 did not properly support context. This function provides a shim // around `TestUtils.createRenderer` that instead returns a ShallowRenderer that actually // works with context. See https://github.com/facebook/react/issues/3721 for more details. createShallowRenderer = <span class="fstat-no" title="function not covered" >function createRendererCompatible() {</span> <span class="cstat-no" title="statement not covered" > const renderer = TestUtils.createRenderer();</span> <span class="cstat-no" title="statement not covered" > renderer.render = <span class="fstat-no" title="function not covered" >(o</span>riginalRender =&gt; <span class="fstat-no" title="function not covered" >function contextCompatibleRender(node, context = {}) {</span></span> <span class="cstat-no" title="statement not covered" > ReactContext.current = context;</span> <span class="cstat-no" title="statement not covered" > originalRender.call(this, React.createElement(node.type, node.props), context);</span> <span class="cstat-no" title="statement not covered" > ReactContext.current = {};</span> <span class="cstat-no" title="statement not covered" > return renderer.getRenderOutput();</span> })(renderer.render); <span class="cstat-no" title="statement not covered" > return renderer;</span> }; <span class="cstat-no" title="statement not covered" > renderIntoDocument = T</span>estUtils.renderIntoDocument; // this fixes some issues in React 0.13 with setState and jsdom... // see issue: https://github.com/airbnb/enzyme/issues/27 require('react/lib/ExecutionEnvironment').canUseDOM = true; &nbsp; // in 0.13, a Children.toArray function was not exported. Make our own instead. childrenToArray = <span class="fstat-no" title="function not covered" >(children) =&gt; {</span> <span class="cstat-no" title="statement not covered" > const results = [];</span> <span class="cstat-no" title="statement not covered" ></span> if (children !== undefined &amp;&amp; children !== null &amp;&amp; children !== false) { <span class="cstat-no" title="statement not covered" > React.Children.forEach(children, <span class="fstat-no" title="function not covered" >(el) =&gt; {</span></span> <span class="cstat-no" title="statement not covered" ></span> if (el !== undefined &amp;&amp; el !== null &amp;&amp; el !== false) { <span class="cstat-no" title="statement not covered" > results.push(el);</span> } }); } <span class="cstat-no" title="statement not covered" > return results;</span> }; } else { renderToStaticMarkup = require('react-dom/server').renderToStaticMarkup; findDOMNode = require('react-dom').findDOMNode; // We require the testutils, but they don't come with 0.14 out of the box, so we // require them here through this node module. The bummer is that we are not able // to list this as a dependency in package.json and have 0.13 work properly. // As a result, right now this is basically an implicit dependency. TestUtils = require('react-addons-test-utils'); &nbsp; // Shallow rendering changed from 0.13 =&gt; 0.14 in such a way that // 0.14 now does not allow shallow rendering of native DOM elements. // This is mainly because the result of such a call should not realistically // be any different than the JSX you passed in (result of `React.createElement`. // In order to maintain the same behavior across versions, this function // is essentially a replacement for `TestUtils.createRenderer` that doesn't use // shallow rendering when it's just a DOM element. createShallowRenderer = function createRendererCompatible() { const renderer = TestUtils.createRenderer(); let isDOM = false; let _node; return { _instance: renderer._instance, render(node, context) { if (typeof node.type === 'string') { isDOM = true; _node = node; } else { isDOM = false; renderer.render(node, context); this._instance = renderer._instance; } }, getRenderOutput() { if (isDOM) { return _node; } return renderer.getRenderOutput(); }, }; }; renderIntoDocument = TestUtils.renderIntoDocument; childrenToArray = React.Children.toArray; } &nbsp; const { mockComponent, isElement, isElementOfType, isDOMComponent, isCompositeComponent, isCompositeComponentWithType, isCompositeComponentElement, Simulate, findAllInRenderedTree, } = TestUtils; &nbsp; export { createShallowRenderer, renderToStaticMarkup, renderIntoDocument, mockComponent, isElement, isElementOfType, isDOMComponent, isCompositeComponent, isCompositeComponentWithType, isCompositeComponentElement, Simulate, findDOMNode, findAllInRenderedTree, childrenToArray, }; &nbsp;</pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 02 2016 10:59:05 GMT-0800 (PST) </div> </div> <script src="../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../sorter.js"></script> </body> </html>