UNPKG

unexpected

Version:
388 lines (320 loc) 23.8 kB
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=0"> <link rel="stylesheet" href="/static/normalize.css" type="text/css" media="screen" /> <link rel="stylesheet" href="/static/main.css" type="text/css" media="screen" /> <link rel="shortcut icon" type="image/vnd.microsoft.icon" href="/static/bug-icon-black.ico"> <title>any - to satisfy</title> </head> <body class="sidebar-hidden has-sidebar"> <header> <div class="logo-icon"></div> <nav> <ul> <li class="menu-toggle-item"> <button class="menu-toggle" onclick="toggleSidebar()"></button> </li> <li class=""><a href="/">Unexpected</a></li> <li class="active"><a href="/assertions/any/to-be-a/">Assertions</a></li> <li class=""><a href="/api/addAssertion/">API</a></li> </ul> </nav> <div class="search" style="visibility: hidden"> <input id="search" placeholder="Search..." value=""> <div id="searchDropDown" class="dropDown"> <ul id="searchResults"></ul> </div> </div> </header> <section id="assertions"> <nav id="assertion-menu" class="sidebar js-remember-scroll-position"> <ul> <li> <h3>any</h3> <ul> <li class=""> <a href="/assertions/any/to-be-a/">to be a</a> </li> <li class=""> <a href="/assertions/any/to-be-falsy/">to be falsy</a> </li> <li class=""> <a href="/assertions/any/to-be-null/">to be null</a> </li> <li class=""> <a href="/assertions/any/to-be-ok/">to be ok</a> </li> <li class=""> <a href="/assertions/any/to-be-truthy/">to be truthy</a> </li> <li class=""> <a href="/assertions/any/to-be-undefined/">to be undefined</a> </li> <li class=""> <a href="/assertions/any/to-be/">to be</a> </li> <li class=""> <a href="/assertions/any/to-equal/">to equal</a> </li> <li class="active"> <a href="/assertions/any/to-satisfy/">to satisfy</a> </li> <li class=""> <a href="/assertions/any/to-be-defined/">to be defined</a> </li> </ul> </li> <li> <h3>array</h3> <ul> <li class=""> <a href="/assertions/array/to-be-an-array-whose-items-satisfy/">to be an array whose items satisfy</a> </li> <li class=""> <a href="/assertions/array/to-be-empty/">to be empty</a> </li> <li class=""> <a href="/assertions/array/to-be-non-empty/">to be non-empty</a> </li> <li class=""> <a href="/assertions/array/to-contain/">to contain</a> </li> <li class=""> <a href="/assertions/array/to-have-length/">to have length</a> </li> </ul> </li> <li> <h3>boolean</h3> <ul> <li class=""> <a href="/assertions/boolean/to-be-false/">to be false</a> </li> <li class=""> <a href="/assertions/boolean/to-be-true/">to be true</a> </li> </ul> </li> <li> <h3>function</h3> <ul> <li class=""> <a href="/assertions/function/to-have-arity/">to have arity</a> </li> <li class=""> <a href="/assertions/function/to-throw/">to throw</a> </li> </ul> </li> <li> <h3>number</h3> <ul> <li class=""> <a href="/assertions/number/to-be-greater-than/">to be greater than</a> </li> <li class=""> <a href="/assertions/number/to-be-infinite/">to be infinite</a> </li> <li class=""> <a href="/assertions/number/to-be-close-to/">to be close to</a> </li> <li class=""> <a href="/assertions/number/to-be-finite/">to be finite</a> </li> <li class=""> <a href="/assertions/number/to-be-greater-than-or-equal-to/">to be greater than or equal to</a> </li> <li class=""> <a href="/assertions/number/to-be-NaN/">to be NaN</a> </li> <li class=""> <a href="/assertions/number/to-be-less-than-or-equal-to/">to be less than or equal to</a> </li> <li class=""> <a href="/assertions/number/to-be-less-than/">to be less than</a> </li> <li class=""> <a href="/assertions/number/to-be-negative/">to be negative</a> </li> <li class=""> <a href="/assertions/number/to-be-positive/">to be positive</a> </li> <li class=""> <a href="/assertions/number/to-be-within/">to be within</a> </li> </ul> </li> <li> <h3>object</h3> <ul> <li class=""> <a href="/assertions/object/to-be-a-map-whose-keys-satisfy/">to be a map whose keys satisfy</a> </li> <li class=""> <a href="/assertions/object/to-be-a-map-whose-values-satisfy/">to be a map whose values satisfy</a> </li> <li class=""> <a href="/assertions/object/to-be-canonical/">to be canonical</a> </li> <li class=""> <a href="/assertions/object/to-have-key/">to have key</a> </li> <li class=""> <a href="/assertions/object/to-have-keys/">to have keys</a> </li> <li class=""> <a href="/assertions/object/to-have-properties/">to have properties</a> </li> <li class=""> <a href="/assertions/object/to-have-property/">to have property</a> </li> </ul> </li> <li> <h3>string</h3> <ul> <li class=""> <a href="/assertions/string/to-be-non-empty/">to be non-empty</a> </li> <li class=""> <a href="/assertions/string/to-be-empty/">to be empty</a> </li> <li class=""> <a href="/assertions/string/to-be-greater-than/">to be greater than</a> </li> <li class=""> <a href="/assertions/string/to-be-less-than-or-equal-to/">to be less than or equal to</a> </li> <li class=""> <a href="/assertions/string/to-be-less-than/">to be less than</a> </li> <li class=""> <a href="/assertions/string/to-be-greater-than-or-equal-to/">to be greater than or equal to</a> </li> <li class=""> <a href="/assertions/string/to-be-within/">to be within</a> </li> <li class=""> <a href="/assertions/string/to-be/">to be</a> </li> <li class=""> <a href="/assertions/string/to-contain/">to contain</a> </li> <li class=""> <a href="/assertions/string/to-have-length/">to have length</a> </li> <li class=""> <a href="/assertions/string/to-match/">to match</a> </li> </ul> </li> </ul> </nav> <div class="main"> <div class="content"> <p>Asserts that a value match a given specification.</p> <p>All properties and nested objects mentioned in the right-hand side object are required to be present. Primitive values are compared with <code>to equal</code> semantics:</p> <div class="code lang-javascript"> <div><span style="color: #000000">expect</span><span style="color: #000000">({</span>&nbsp;hey<span style="color: #000000">:</span>&nbsp;<span style="color: #000000">{</span>&nbsp;there<span style="color: #000000">:</span>&nbsp;<span style="color: #0086b3">true</span>&nbsp;<span style="color: #000000">}</span>&nbsp;<span style="color: #000000">},</span>&nbsp;<span style="color: #df5000">'to&nbsp;satisfy'</span><span style="color: #000000">,</span>&nbsp;<span style="color: #000000">{</span>&nbsp;hey<span style="color: #000000">:</span>&nbsp;<span style="color: #000000">{}</span>&nbsp;<span style="color: #000000">});</span></div> </div><p>To disallow additional properties in the subject, use <code>to exhaustively satisfy</code>:</p> <div class="code lang-javascript"> <div><span style="color: #000000">expect</span><span style="color: #000000">({</span>&nbsp;hey<span style="color: #000000">:</span>&nbsp;<span style="color: #000000">{</span>&nbsp;there<span style="color: #000000">:</span>&nbsp;<span style="color: #0086b3">true</span>&nbsp;<span style="color: #000000">}</span>&nbsp;<span style="color: #000000">},</span>&nbsp;<span style="color: #df5000">'to&nbsp;exhaustively&nbsp;satisfy'</span><span style="color: #000000">,</span>&nbsp;<span style="color: #000000">{</span>&nbsp;hey<span style="color: #000000">:</span>&nbsp;<span style="color: #000000">{</span>&nbsp;there<span style="color: #000000">:</span>&nbsp;<span style="color: #0086b3">true</span>&nbsp;<span style="color: #000000">}</span>&nbsp;<span style="color: #000000">});</span></div> </div><p>Regular expressions and functions in the right-hand side object will be run against the corresponding values in the subject:</p> <div class="code lang-javascript"> <div><span style="color: #000000">expect</span><span style="color: #000000">({</span>&nbsp;bar<span style="color: #000000">:</span>&nbsp;<span style="color: #df5000">'quux'</span><span style="color: #000000">,</span>&nbsp;baz<span style="color: #000000">:</span>&nbsp;<span style="color: #0086b3">true</span>&nbsp;<span style="color: #000000">},</span>&nbsp;<span style="color: #df5000">'to&nbsp;satisfy'</span><span style="color: #000000">,</span>&nbsp;<span style="color: #000000">{</span>&nbsp;bar<span style="color: #000000">:</span>&nbsp;<span style="color: #183691">/QU*X/i</span>&nbsp;<span style="color: #000000">});</span></div> </div><p>Can be combined with <code>expect.it</code> to create complex specifications that delegate to existing assertions:</p> <div class="code lang-javascript"> <div><span style="color: #000000">expect</span><span style="color: #000000">({</span>foo<span style="color: #000000">:</span>&nbsp;<span style="color: #0086b3">123</span><span style="color: #000000">,</span>&nbsp;bar<span style="color: #000000">:</span>&nbsp;<span style="color: #df5000">'bar'</span><span style="color: #000000">,</span>&nbsp;baz<span style="color: #000000">:</span>&nbsp;<span style="color: #df5000">'bogus'</span><span style="color: #000000">,</span>&nbsp;qux<span style="color: #000000">:</span>&nbsp;<span style="color: #0086b3">42</span><span style="color: #000000">},</span>&nbsp;<span style="color: #df5000">'to&nbsp;satisfy'</span><span style="color: #000000">,</span>&nbsp;<span style="color: #000000">{</span></div> <div>&nbsp;&nbsp;&nbsp;&nbsp;foo<span style="color: #000000">:</span>&nbsp;expect<span style="color: #000000">.</span><span style="color: #000000">it</span><span style="color: #000000">(</span><span style="color: #df5000">'to&nbsp;be&nbsp;a&nbsp;number'</span><span style="color: #000000">).</span><span style="color: #000000">and</span><span style="color: #000000">(</span><span style="color: #df5000">'to&nbsp;be&nbsp;greater&nbsp;than'</span><span style="color: #000000">,</span>&nbsp;<span style="color: #0086b3">10</span><span style="color: #000000">),</span></div> <div>&nbsp;&nbsp;&nbsp;&nbsp;baz<span style="color: #000000">:</span>&nbsp;expect<span style="color: #000000">.</span><span style="color: #000000">it</span><span style="color: #000000">(</span><span style="color: #df5000">'not&nbsp;to&nbsp;match'</span><span style="color: #000000">,</span>&nbsp;<span style="color: #183691">/^boh/</span><span style="color: #000000">),</span></div> <div>&nbsp;&nbsp;&nbsp;&nbsp;qux<span style="color: #000000">:</span>&nbsp;expect<span style="color: #000000">.</span><span style="color: #000000">it</span><span style="color: #000000">(</span><span style="color: #df5000">'to&nbsp;be&nbsp;a&nbsp;string'</span><span style="color: #000000">)</span></div> <div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000000">.</span><span style="color: #000000">and</span><span style="color: #000000">(</span><span style="color: #df5000">'not&nbsp;to&nbsp;be&nbsp;empty'</span><span style="color: #000000">)</span></div> <div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000000">.</span><span style="color: #000000">or</span><span style="color: #000000">(</span><span style="color: #df5000">'to&nbsp;be&nbsp;a&nbsp;number'</span><span style="color: #000000">)</span></div> <div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000000">.</span><span style="color: #000000">and</span><span style="color: #000000">(</span><span style="color: #df5000">'to&nbsp;be&nbsp;positive'</span><span style="color: #000000">)</span></div> <div><span style="color: #000000">});</span></div> </div><p>In case of a failing expectation you get the following output:</p> <div class="code lang-javascript"> <div><span style="color: #000000">expect</span><span style="color: #000000">({</span>foo<span style="color: #000000">:</span>&nbsp;<span style="color: #0086b3">9</span><span style="color: #000000">,</span>&nbsp;bar<span style="color: #000000">:</span>&nbsp;<span style="color: #df5000">'bar'</span><span style="color: #000000">,</span>&nbsp;baz<span style="color: #000000">:</span>&nbsp;<span style="color: #df5000">'bogus'</span><span style="color: #000000">,</span>&nbsp;qux<span style="color: #000000">:</span>&nbsp;<span style="color: #0086b3">42</span><span style="color: #000000">},</span>&nbsp;<span style="color: #df5000">'to&nbsp;satisfy'</span><span style="color: #000000">,</span>&nbsp;<span style="color: #000000">{</span></div> <div>&nbsp;&nbsp;&nbsp;&nbsp;foo<span style="color: #000000">:</span>&nbsp;expect<span style="color: #000000">.</span><span style="color: #000000">it</span><span style="color: #000000">(</span><span style="color: #df5000">'to&nbsp;be&nbsp;a&nbsp;number'</span><span style="color: #000000">).</span><span style="color: #000000">and</span><span style="color: #000000">(</span><span style="color: #df5000">'to&nbsp;be&nbsp;greater&nbsp;than'</span><span style="color: #000000">,</span>&nbsp;<span style="color: #0086b3">10</span><span style="color: #000000">),</span></div> <div>&nbsp;&nbsp;&nbsp;&nbsp;baz<span style="color: #000000">:</span>&nbsp;expect<span style="color: #000000">.</span><span style="color: #000000">it</span><span style="color: #000000">(</span><span style="color: #df5000">'not&nbsp;to&nbsp;match'</span><span style="color: #000000">,</span>&nbsp;<span style="color: #183691">/^bog/</span><span style="color: #000000">),</span></div> <div>&nbsp;&nbsp;&nbsp;&nbsp;qux<span style="color: #000000">:</span>&nbsp;expect<span style="color: #000000">.</span><span style="color: #000000">it</span><span style="color: #000000">(</span><span style="color: #df5000">'to&nbsp;be&nbsp;a&nbsp;string'</span><span style="color: #000000">)</span></div> <div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000000">.</span><span style="color: #000000">and</span><span style="color: #000000">(</span><span style="color: #df5000">'not&nbsp;to&nbsp;be&nbsp;empty'</span><span style="color: #000000">)</span></div> <div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000000">.</span><span style="color: #000000">or</span><span style="color: #000000">(</span><span style="color: #df5000">'to&nbsp;be&nbsp;a&nbsp;number'</span><span style="color: #000000">)</span></div> <div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000000">.</span><span style="color: #000000">and</span><span style="color: #000000">(</span><span style="color: #df5000">'to&nbsp;be&nbsp;positive'</span><span style="color: #000000">)</span></div> <div><span style="color: #000000">});</span></div> </div><div class="output"> <div><span style="color: red; font-weight: bold">expected</span>&nbsp;{&nbsp;<span style="color: #555">foo</span>:&nbsp;<span style="color: #0086b3">9</span>,&nbsp;<span style="color: #555">bar</span>:&nbsp;<span style="color: #df5000">'bar'</span>,&nbsp;<span style="color: #555">baz</span>:&nbsp;<span style="color: #df5000">'bogus'</span>,&nbsp;<span style="color: #555">qux</span>:&nbsp;<span style="color: #0086b3">42</span>&nbsp;}&nbsp;<span style="color: red; font-weight: bold">to&nbsp;satisfy</span></div> <div>{</div> <div>&nbsp;&nbsp;<div style="display: inline-block; vertical-align: top"> <div><span style="color: #555">foo</span>:&nbsp;<div style="display: inline-block; vertical-align: top"> <div>expect.it(<span style="color: #df5000">'to&nbsp;be&nbsp;a&nbsp;number'</span>)</div> <div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.and(<span style="color: #df5000">'to&nbsp;be&nbsp;greater&nbsp;than'</span>,&nbsp;<span style="color: #0086b3">10</span>),</div> </div></div> </div></div> <div>&nbsp;&nbsp;<div style="display: inline-block; vertical-align: top"> <div><span style="color: #555">baz</span>:&nbsp;<div style="display: inline-block; vertical-align: top"> <div>expect.it(<span style="color: #df5000">'not&nbsp;to&nbsp;match'</span>,&nbsp;<span style="color: #183691">/^bog/</span>),</div> </div></div> </div></div> <div>&nbsp;&nbsp;<div style="display: inline-block; vertical-align: top"> <div><span style="color: #555">qux</span>:&nbsp;<div style="display: inline-block; vertical-align: top"> <div>expect.it(<span style="color: #df5000">'to&nbsp;be&nbsp;a&nbsp;string'</span>)</div> <div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.and(<span style="color: #df5000">'not&nbsp;to&nbsp;be&nbsp;empty'</span>)</div> <div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.or(<span style="color: #df5000">'to&nbsp;be&nbsp;a&nbsp;number'</span>)</div> <div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.and(<span style="color: #df5000">'to&nbsp;be&nbsp;positive'</span>)</div> </div></div> </div></div> <div>}</div> <div>&nbsp;</div> <div>{</div> <div>&nbsp;&nbsp;<div style="display: inline-block; vertical-align: top"> <div><span style="color: #555">foo</span>:&nbsp;<div style="display: inline-block; vertical-align: top"> <div><span style="color: #0086b3">9</span>,</div> </div>&nbsp;<div style="display: inline-block; vertical-align: top"> <div><span style="color: red; font-weight: bold">//</span></div> <div><span style="color: red; font-weight: bold">//</span></div> </div>&nbsp;<div style="display: inline-block; vertical-align: top"> <div><span style="color: green; font-weight: bold">&nbsp;</span><div style="display: inline-block; vertical-align: top"> <div><span style="color: green; font-weight: bold">expected&nbsp;</span>9&nbsp;<span style="color: green; font-weight: bold">to&nbsp;be&nbsp;a&nbsp;number</span></div> </div><span style="color: #969896">&nbsp;and</span></div> <div><span style="color: red; font-weight: bold">&nbsp;</span><div style="display: inline-block; vertical-align: top"> <div><span style="color: red; font-weight: bold">expected</span>&nbsp;<span style="color: #0086b3">9</span>&nbsp;<span style="color: red; font-weight: bold">to&nbsp;be&nbsp;greater&nbsp;than</span>&nbsp;<span style="color: #0086b3">10</span></div> </div></div> </div></div> </div></div> <div>&nbsp;&nbsp;<div style="display: inline-block; vertical-align: top"> <div><span style="color: #555">bar</span>:&nbsp;<span style="color: #df5000">'bar'</span>,</div> </div></div> <div>&nbsp;&nbsp;<div style="display: inline-block; vertical-align: top"> <div><span style="color: #555">baz</span>:&nbsp;<div style="display: inline-block; vertical-align: top"> <div><span style="color: #df5000">'bogus'</span>,</div> </div>&nbsp;<div style="display: inline-block; vertical-align: top"> <div><span style="color: red; font-weight: bold">//</span></div> <div><span style="color: red; font-weight: bold">//</span></div> <div><span style="color: red; font-weight: bold">//</span></div> </div>&nbsp;<div style="display: inline-block; vertical-align: top"> <div><div style="display: inline-block; vertical-align: top"> <div><span style="color: red; font-weight: bold">expected</span>&nbsp;<span style="color: #df5000">'bogus'</span>&nbsp;<span style="color: red; font-weight: bold">not&nbsp;to&nbsp;match</span>&nbsp;<span style="color: #183691">/^bog/</span></div> <div>&nbsp;</div> <div><span style="background-color: red; color: white">bog</span>us</div> </div></div> </div></div> </div></div> <div>&nbsp;&nbsp;<div style="display: inline-block; vertical-align: top"> <div><span style="color: #555">qux</span>:&nbsp;<span style="color: #0086b3">42</span></div> </div></div> <div>}</div> </div> </div> </div> </section> <script type="text/javascript" src="/static/toggleSidebar.js"></script> <script type="text/javascript" src="/static/rememberScrollPosition.js"></script> <script type="text/javascript" src="/static/search.js"></script> </body> </html>