{"action":"created","issue":{"url":"https://api.github.com/repos/Workpop/typed-validation/issues/12","repository_url":"https://api.github.com/repos/Workpop/typed-validation","labels_url":"https://api.github.com/repos/Workpop/typed-validation/issues/12/labels{/name}","comments_url":"https://api.github.com/repos/Workpop/typed-validation/issues/12/comments","events_url":"https://api.github.com/repos/Workpop/typed-validation/issues/12/events","html_url":"https://github.com/Workpop/typed-validation/pull/12","id":232007161,"number":12,"title":"Update chai to the latest version 🚀","user":{"login":"greenkeeper[bot]","id":23040076,"avatar_url":"https://avatars1.githubusercontent.com/u/13812225?v=3","gravatar_id":"","url":"https://api.github.com/users/greenkeeper%5Bbot%5D","html_url":"https://github.com/apps/greenkeeper","followers_url":"https://api.github.com/users/greenkeeper%5Bbot%5D/followers","following_url":"https://api.github.com/users/greenkeeper%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/greenkeeper%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/greenkeeper%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/greenkeeper%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/greenkeeper%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/greenkeeper%5Bbot%5D/repos","events_url":"https://api.github.com/users/greenkeeper%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/greenkeeper%5Bbot%5D/received_events","type":"Bot","site_admin":false},"labels":[{"id":481407528,"url":"https://api.github.com/repos/Workpop/typed-validation/labels/greenkeeper","name":"greenkeeper","color":"00c775","default":false}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":1,"created_at":"2017-05-29T12:16:47Z","updated_at":"2017-06-05T21:05:24Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/Workpop/typed-validation/pulls/12","html_url":"https://github.com/Workpop/typed-validation/pull/12","diff_url":"https://github.com/Workpop/typed-validation/pull/12.diff","patch_url":"https://github.com/Workpop/typed-validation/pull/12.patch"},"body":"\n\n## Version **4.0.0** of [chai](https://github.com/chaijs/chai) just got published.\n\n<table>\n  <tr>\n    <th align=left>\n      Dependency\n    </td>\n    <td>\n      chai\n    </td>\n  </tr>\n  <tr>\n    <th align=left>\n      Current Version\n    </td>\n    <td>\n      3.5.0\n    </td>\n  </tr>\n  <tr>\n    <th align=left>\n      Type\n    </td>\n    <td>\n      devDependency\n    </td>\n  </tr>\n</table>\n\nThe version **4.0.0** is **not covered** by your **current version range**.\n\nWithout accepting this pull request your project will work just like it did before. There might be a bunch of new features, fixes and perf improvements that the maintainers worked on for you though.\n\nI recommend you look into these changes and try to get onto the latest version of chai.\nGiven that you have a decent test suite, a passing build is a strong indicator that you can take advantage of these changes by merging the proposed change into your project. Otherwise this branch is a great starting point for you to work on the update.\n\n\n---\n\n\n<details>\n<summary>Release Notes</summary>\n<strong>4.0.0 / 2016-10-24</strong>\n\n<h1>4.0.0</h1>\n<p>4.0 has been a huge undertaking by the chai community! A lot has changed to ensure Chai 4 is a stable, reliable, well documented codebase. Here are just some of the major improvements:</p>\n<ul>\n<li>\n<p>almost all documentation has been rewritten, with detailed instructions on how assertions work, which flags they can be combined with and the best practices for how to use them.</p>\n</li>\n<li>\n<p>deep equality has been rewritten from the ground up to support ES6 types like <code>Map</code> and <code>Set</code>, and better support existing types. It is now also much, much faster than before and allows us to bring some great improvements in upcoming releases.</p>\n</li>\n<li>\n<p>we have made sure the <code>deep</code> flag now <em>only ever does deep equality</em>. Beforehand, it would sometimes also be used to test nested properties (for example <code>expect(foo).to.have.deep.property('bar.baz')</code>. For nested assertions, please now use the <code>.nested</code> flag.</p>\n</li>\n<li>\n<p>many assertions have become more strict, which means you get better error messages explaining where things have gone wrong. For the most part, this wont mean error messages where there weren't error messages before, but it will mean better error messages to replace the, sometimes cryptic, default <code>TypeError</code> messages.</p>\n</li>\n<li>\n<p>we've added detections and helpful error messages for common mistakes and typos. The error messages will, in some cases, point you to documentation or in other cases suggest alternatives. These messages will continue to be improved in future releases, so let us know if you have any suggestions!</p>\n</li>\n</ul>\n<h1>Breaking Changes</h1>\n<ul>\n<li>\n<p>We no longer support Node v0.10 and v0.12 (since their LTS has ended) <em>(PRs: <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/816\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/816\" data-id=\"180535917\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#816</a>, <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/901\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/901\" data-id=\"200238975\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#901</a>)</em></p>\n</li>\n<li>\n<p>Instead of allowing the user to write the path of a property, <strong>now the deep flag performs a deep equality comparison when used with the <code>.property</code> assertion</strong>.<br>\nIf you want the old behavior of using the dot or bracket notation to denote the property you want to assert against <strong>you can use the new <code>.nested</code> flag</strong>. <em>(Related Issues: <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/745\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/745\" data-id=\"163662113\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#745</a>, <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/743\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/743\" data-id=\"163233434\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#743</a>, PRs: <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/758\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/758\" data-id=\"167499473\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#758</a>, <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/757\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/757\" data-id=\"167498970\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#757</a>)</em></p>\n<div class=\"highlight highlight-source-js\"><pre><span class=\"pl-k\">const</span> <span class=\"pl-c1\">obj</span> <span class=\"pl-k\">=</span> {a<span class=\"pl-k\">:</span> <span class=\"pl-c1\">1</span>};\n\n<span class=\"pl-c\"><span class=\"pl-c\">//</span> The `.deep` flag now does deep equality comparisons</span>\n<span class=\"pl-en\">expect</span>({foo<span class=\"pl-k\">:</span> obj}).<span class=\"pl-smi\">to</span>.<span class=\"pl-smi\">have</span>.<span class=\"pl-smi\">deep</span>.<span class=\"pl-en\">property</span>(<span class=\"pl-s\"><span class=\"pl-pds\">'</span>foo<span class=\"pl-pds\">'</span></span>, {a<span class=\"pl-k\">:</span> <span class=\"pl-c1\">1</span>});\n\n<span class=\"pl-c\"><span class=\"pl-c\">//</span> Use the `nested` flag if you want to assert against a nested property using the bracket or dot notation</span>\n<span class=\"pl-en\">expect</span>({foo<span class=\"pl-k\">:</span> obj}).<span class=\"pl-smi\">to</span>.<span class=\"pl-smi\">have</span>.<span class=\"pl-smi\">nested</span>.<span class=\"pl-en\">property</span>(<span class=\"pl-s\"><span class=\"pl-pds\">'</span>foo.a<span class=\"pl-pds\">'</span></span>, <span class=\"pl-c1\">1</span>);\n\n<span class=\"pl-c\"><span class=\"pl-c\">//</span> You can also use both flags combined</span>\n<span class=\"pl-k\">const</span> <span class=\"pl-c1\">obj2</span> <span class=\"pl-k\">=</span> {a<span class=\"pl-k\">:</span> {b<span class=\"pl-k\">:</span> <span class=\"pl-c1\">2</span>}};\n<span class=\"pl-en\">expect</span>({foo<span class=\"pl-k\">:</span> obj2}).<span class=\"pl-smi\">to</span>.<span class=\"pl-smi\">have</span>.<span class=\"pl-smi\">deep</span>.<span class=\"pl-smi\">nested</span>.<span class=\"pl-en\">property</span>(<span class=\"pl-s\"><span class=\"pl-pds\">'</span>foo.a<span class=\"pl-pds\">'</span></span>, {b<span class=\"pl-k\">:</span> <span class=\"pl-c1\">2</span>});</pre></div>\n<p>Please notice that the old methods which used the old behavior of the <code>deep</code> flag on the <code>assert</code> interface have been renamed. They all have had the <code>deep</code> word changed by the <code>nested</code> word. If you want to know more about this please take a look at <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/757\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/757\" data-id=\"167498970\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#757</a>.</p>\n</li>\n<li>\n<p>Previously, <code>expect(obj).not.property(name, val)</code> would throw an Error if <code>obj</code> didn't have a property named <code>name</code>. This change causes the assertion to pass instead.<br>\nThe <code>assert.propertyNotVal</code> and <code>assert.deepPropertyNotVal</code> assertions were renamed to <code>assert.notPropertyVal</code> and <code>assert.notDeepPropertyVal</code>, respectively. <em>(Related Issues: <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/16\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/16\" data-id=\"3194806\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#16</a>, <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/743\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/743\" data-id=\"163233434\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#743</a>, <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/758\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/758\" data-id=\"167499473\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#758</a>)</em></p>\n</li>\n<li>\n<p>You can now use the <code>deep</code> flag for the <code>.include</code> assertion in order to perform a <code>deep</code> equality check to see if something is included on the <code>target</code>.<br>\nPreviously, <code>.include</code> was using strict equality (<code>===</code>) for non-negated property inclusion, but <code>deep</code> equality for negated property inclusion and array inclusion.<br>\n<strong>This change causes the .include assertion to always use strict equality unless the deep flag is set.</strong><br>\nPlease take a look <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/743#issuecomment-235763477\">at this comment</a> if you want to know more about it.  <em>(Related Issues: <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/743\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/743\" data-id=\"163233434\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#743</a>, PRs: <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/760\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/760\" data-id=\"167985346\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#760</a>, <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/761\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/761\" data-id=\"167986303\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#761</a>)</em></p>\n<div class=\"highlight highlight-source-js\"><pre><span class=\"pl-k\">const</span> <span class=\"pl-c1\">obj</span> <span class=\"pl-k\">=</span> {a<span class=\"pl-k\">:</span> <span class=\"pl-c1\">1</span>};\n<span class=\"pl-en\">expect</span>([obj]).<span class=\"pl-smi\">to</span>.<span class=\"pl-smi\">deep</span>.<span class=\"pl-en\">include</span>({a<span class=\"pl-k\">:</span><span class=\"pl-c1\">1</span>});\n<span class=\"pl-en\">expect</span>({foo<span class=\"pl-k\">:</span> obj}).<span class=\"pl-smi\">to</span>.<span class=\"pl-smi\">deep</span>.<span class=\"pl-en\">include</span>({foo<span class=\"pl-k\">:</span> {a<span class=\"pl-k\">:</span><span class=\"pl-c1\">1</span>}});</pre></div>\n</li>\n<li>\n<p>Fix unstable behavior of the <code>NaN</code> assertion. Now we use the suggested ES6 implementation.<br>\nThe new implementation is now more correct, strict and simple. While the old one threw false positives, the new implementation only checks if something is <code>NaN</code> (or not if the <code>.not</code> flag is used) and nothing else. <em>(Related Issues: <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/498\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/498\" data-id=\"96724136\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#498</a>, <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/682\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/682\" data-id=\"149650035\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#682</a>, <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/681\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/681\" data-id=\"149465663\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#681</a>, PRs: <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/508\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/508\" data-id=\"101991161\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#508</a>)</em></p>\n<div class=\"highlight highlight-source-js\"><pre><span class=\"pl-c\"><span class=\"pl-c\">//</span> Only `NaN` will be considered to be `NaN` and nothing else</span>\n<span class=\"pl-en\">expect</span>(<span class=\"pl-c1\">NaN</span>).<span class=\"pl-smi\">to</span>.<span class=\"pl-smi\">be</span>.<span class=\"pl-smi\">NaN</span>;\n\n<span class=\"pl-c\"><span class=\"pl-c\">//</span> Anything that is not `NaN` cannot be considered as `NaN`</span>\n<span class=\"pl-en\">expect</span>(<span class=\"pl-s\"><span class=\"pl-pds\">'</span>randomString<span class=\"pl-pds\">'</span></span>).<span class=\"pl-smi\">not</span>.<span class=\"pl-smi\">to</span>.<span class=\"pl-smi\">be</span>.<span class=\"pl-smi\">NaN</span>;\n<span class=\"pl-en\">expect</span>(<span class=\"pl-c1\">true</span>).<span class=\"pl-smi\">not</span>.<span class=\"pl-smi\">to</span>.<span class=\"pl-smi\">be</span>.<span class=\"pl-smi\">NaN</span>;\n<span class=\"pl-en\">expect</span>({}).<span class=\"pl-smi\">not</span>.<span class=\"pl-smi\">to</span>.<span class=\"pl-smi\">be</span>.<span class=\"pl-smi\">NaN</span>;\n<span class=\"pl-en\">expect</span>(<span class=\"pl-c1\">4</span>).<span class=\"pl-smi\">not</span>.<span class=\"pl-smi\">to</span>.<span class=\"pl-smi\">be</span>.<span class=\"pl-smi\">NaN</span>;</pre></div>\n</li>\n<li>\n<p>The Typed Array types are now truncated if they're too long (in this case, if they exceed the <code>truncateThreshold</code> value on the <code>config</code>). <em>(Related Issues: <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/441\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/441\" data-id=\"74488870\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#441</a>, PRs: <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/576\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/576\" data-id=\"123576447\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#576</a>)</em></p>\n<div class=\"highlight highlight-source-js\"><pre><span class=\"pl-k\">var</span> arr <span class=\"pl-k\">=</span> [];\n<span class=\"pl-k\">for</span> (<span class=\"pl-k\">var</span> i <span class=\"pl-k\">=</span> <span class=\"pl-c1\">1</span>; i <span class=\"pl-k\">&lt;=</span> <span class=\"pl-c1\">1000</span>; i<span class=\"pl-k\">++</span>) {\n  <span class=\"pl-smi\">arr</span>.<span class=\"pl-c1\">push</span>(i);\n}\n\n<span class=\"pl-c\"><span class=\"pl-c\">//</span> The assertion below will truncate the diff shown and the enormous typed array will be shown as:</span>\n<span class=\"pl-c\"><span class=\"pl-c\">//</span> [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ...  ] instead of printing the whole typed array</span>\n<span class=\"pl-smi\">chai</span>.<span class=\"pl-en\">expect</span>(<span class=\"pl-k\">new</span> <span class=\"pl-en\">Float32Array</span>(<span class=\"pl-c1\">100</span>)).<span class=\"pl-smi\">to</span>.<span class=\"pl-en\">equal</span>(<span class=\"pl-c1\">1</span>);</pre></div>\n</li>\n<li>\n<p>The assertions: <code>within</code>, <code>above</code>, <code>least</code>, <code>below</code>, <code>most</code>, <code>increase</code>, <code>decrease</code> will throw an error if the assertion's target or arguments are not numbers. <em>(Related Issues: <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/691\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/691\" data-id=\"151439996\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#691</a>, PRs: <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/692\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/692\" data-id=\"152053192\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#692</a>, <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/796\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/796\" data-id=\"176200257\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#796</a>)</em></p>\n<div class=\"highlight highlight-source-js\"><pre><span class=\"pl-c\"><span class=\"pl-c\">//</span> These will throw errors, for example:</span>\n<span class=\"pl-en\">expect</span>(<span class=\"pl-c1\">null</span>).<span class=\"pl-smi\">to</span>.<span class=\"pl-smi\">be</span>.<span class=\"pl-en\">within</span>(<span class=\"pl-c1\">0</span>, <span class=\"pl-c1\">1</span>);\n<span class=\"pl-en\">expect</span>(<span class=\"pl-c1\">null</span>).<span class=\"pl-smi\">to</span>.<span class=\"pl-smi\">be</span>.<span class=\"pl-c1\">above</span>(<span class=\"pl-c1\">10</span>);\n<span class=\"pl-en\">expect</span>(<span class=\"pl-c1\">null</span>).<span class=\"pl-smi\">to</span>.<span class=\"pl-smi\">be</span>.<span class=\"pl-smi\">at</span>.<span class=\"pl-en\">least</span>(<span class=\"pl-c1\">20</span>);\n<span class=\"pl-en\">expect</span>(<span class=\"pl-c1\">null</span>).<span class=\"pl-smi\">to</span>.<span class=\"pl-smi\">be</span>.<span class=\"pl-c1\">below</span>(<span class=\"pl-c1\">20</span>);\n<span class=\"pl-en\">expect</span>(<span class=\"pl-c1\">null</span>).<span class=\"pl-smi\">to</span>.<span class=\"pl-smi\">be</span>.<span class=\"pl-smi\">at</span>.<span class=\"pl-en\">most</span>(<span class=\"pl-c1\">20</span>);\n<span class=\"pl-en\">expect</span>(<span class=\"pl-c1\">null</span>).<span class=\"pl-smi\">to</span>.<span class=\"pl-smi\">increase</span>.<span class=\"pl-en\">by</span>(<span class=\"pl-c1\">20</span>);\n<span class=\"pl-en\">expect</span>(<span class=\"pl-c1\">null</span>).<span class=\"pl-smi\">to</span>.<span class=\"pl-smi\">decrease</span>.<span class=\"pl-en\">by</span>(<span class=\"pl-c1\">20</span>);\n\n<span class=\"pl-c\"><span class=\"pl-c\">//</span> This will not:</span>\n<span class=\"pl-en\">expect</span>(<span class=\"pl-s\"><span class=\"pl-pds\">'</span>string<span class=\"pl-pds\">'</span></span>).<span class=\"pl-smi\">to</span>.<span class=\"pl-smi\">have</span>.<span class=\"pl-smi\">a</span>.<span class=\"pl-smi\">lengthOf</span>.<span class=\"pl-smi\">at</span>.<span class=\"pl-en\">least</span>(<span class=\"pl-c1\">3</span>);</pre></div>\n</li>\n<li>\n<p>Previously, <code>expect(obj).not.ownProperty(name, val)</code> would throw an Error if obj didn't have an own property (non-inherited) named name. This change causes the assertion to pass instead. (Related Issues: <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/795\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/795\" data-id=\"176197771\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#795</a>, #, PRs: <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/744\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/744\" data-id=\"163539995\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#744</a>, <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/810\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/810\" data-id=\"179744777\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#810</a>)*</p>\n<div class=\"highlight highlight-source-js\"><pre><span class=\"pl-en\">expect</span>({ foo<span class=\"pl-k\">:</span> <span class=\"pl-s\"><span class=\"pl-pds\">'</span>baz<span class=\"pl-pds\">'</span></span> }).<span class=\"pl-smi\">to</span>.<span class=\"pl-smi\">not</span>.<span class=\"pl-smi\">have</span>.<span class=\"pl-smi\">own</span>.<span class=\"pl-en\">property</span>(<span class=\"pl-s\"><span class=\"pl-pds\">'</span>quux<span class=\"pl-pds\">'</span></span>, <span class=\"pl-s\"><span class=\"pl-pds\">'</span>baz<span class=\"pl-pds\">'</span></span>);</pre></div>\n</li>\n<li>\n<p>The <code>.empty</code> assertion will now throw when it is passed non-string primitives and functions <em>(PRs: <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/763\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/763\" data-id=\"168742416\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#763</a>, <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/812\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/812\" data-id=\"180394986\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#812</a>)</em></p>\n<div class=\"highlight highlight-source-js\"><pre><span class=\"pl-c\"><span class=\"pl-c\">//</span> These will throw TypeErrors:</span>\n<span class=\"pl-en\">expect</span>(<span class=\"pl-c1\">Symbol</span>()).<span class=\"pl-smi\">to</span>.<span class=\"pl-smi\">be</span>.<span class=\"pl-smi\">empty</span>;\n<span class=\"pl-en\">expect</span>(<span class=\"pl-k\">function</span>() {}).<span class=\"pl-smi\">to</span>.<span class=\"pl-smi\">be</span>.<span class=\"pl-smi\">empty</span>;\n<span class=\"pl-en\">expect</span>(<span class=\"pl-c1\">true</span>).<span class=\"pl-smi\">to</span>.<span class=\"pl-smi\">be</span>.<span class=\"pl-smi\">empty</span>;\n<span class=\"pl-en\">expect</span>(<span class=\"pl-c1\">1</span>).<span class=\"pl-smi\">to</span>.<span class=\"pl-smi\">be</span>.<span class=\"pl-smi\">empty</span></pre></div>\n</li>\n<li>\n<p>Assertion subject (<code>obj</code>) changes when using <code>ownProperty</code> or <code>own.property</code> and thus enables chaining. <em>(Related Issues: <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/281\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/281\" data-id=\"38386866\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#281</a>, PRs: <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/641\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/641\" data-id=\"140789045\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#641</a>)</em></p>\n<div class=\"highlight highlight-source-js\"><pre><span class=\"pl-en\">expect</span>({val<span class=\"pl-k\">:</span> <span class=\"pl-c1\">20</span>}).<span class=\"pl-smi\">to</span>.<span class=\"pl-smi\">have</span>.<span class=\"pl-smi\">own</span>.<span class=\"pl-en\">property</span>(<span class=\"pl-s\"><span class=\"pl-pds\">'</span>val<span class=\"pl-pds\">'</span></span>).<span class=\"pl-c1\">above</span>(<span class=\"pl-c1\">10</span>);</pre></div>\n</li>\n<li>\n<p>The <code>.change</code>, <code>.increase</code>, and <code>.decrease</code> assertions changed from chainable method assertions to method assertions. They don't have any chaining behavior, and there's no generic semantic benefit to chaining them. <em>(Related Issues: <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/917\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/917\" data-id=\"203276258\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#917</a>, PRs: <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/925\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/925\" data-id=\"204165055\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#925</a>)</em></p>\n</li>\n</ul>\n<pre><code>// This will not work anymore because there is no benefit to chaining these assertions:\nexpect(function() {}).to.change.by(2)\nexpect(function() {}).to.increase.by(2)\nexpect(function() {}).to.decrease.by(2)\n</code></pre>\n<ul>\n<li>\n<p>The <code>utils</code> (second argument passed to the <code>chai.use</code> callback function) no longer exports the <code>getPathValue</code> function. If you want to use that please use the <a href=\"https://urls.greenkeeper.io/chaijs/pathval\"><code>pathval</code></a> module, which is what chai uses internally now. <em>(Related Issues: <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/457\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/457\" data-id=\"83165272\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#457</a>, <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/737\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/737\" data-id=\"162136897\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#737</a>, PRs: <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/830\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/830\" data-id=\"181230721\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#830</a>)</em></p>\n</li>\n<li>\n<p>(<em>For plugin authors</em>) Throw when calling <code>_super</code>on <code>overwriteMethod</code>if the method being overwritten is <code>undefined</code>.<br>\nCurrently if the method you are trying to overwrite is not defined and your new method calls <code>_super</code> it will throw an <code>Error</code>.<em>(Related Issues: <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/467\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/467\" data-id=\"86294823\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#467</a>, PRs: <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/528\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/528\" data-id=\"109706797\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#528</a>)</em><br>\nBefore this change, calling <code>_super</code> would simply return <code>this</code>.</p>\n<div class=\"highlight highlight-source-js\"><pre><span class=\"pl-c\"><span class=\"pl-c\">//</span> Considering the method `imaginaryMethod` does not exist, this would throw an error for example:</span>\n<span class=\"pl-smi\">chai</span>.<span class=\"pl-en\">use</span>(<span class=\"pl-k\">function</span> (<span class=\"pl-smi\">chai</span>, <span class=\"pl-smi\">utilities</span>) {\n  <span class=\"pl-smi\">chai</span>.<span class=\"pl-smi\">Assertion</span>.<span class=\"pl-en\">overwriteMethod</span>(<span class=\"pl-s\"><span class=\"pl-pds\">'</span>imaginaryMethod<span class=\"pl-pds\">'</span></span>, <span class=\"pl-k\">function</span> (<span class=\"pl-smi\">_super</span>) {\n    <span class=\"pl-k\">return</span> <span class=\"pl-k\">function</span> () {\n      <span class=\"pl-smi\">_super</span>.<span class=\"pl-c1\">apply</span>(<span class=\"pl-c1\">this</span>, <span class=\"pl-c1\">arguments</span>);\n    }\n  });\n});\n\n<span class=\"pl-c\"><span class=\"pl-c\">//</span> This will throw an error since you are calling `_super` which should be a method (in this case, the overwritten assertion) that does not exist</span>\n<span class=\"pl-en\">expect</span>(<span class=\"pl-s\"><span class=\"pl-pds\">'</span>anything<span class=\"pl-pds\">'</span></span>).<span class=\"pl-smi\">to</span>.<span class=\"pl-en\">imaginaryMethod</span>(); </pre></div>\n</li>\n<li>\n<p>(<em>For plugin authors</em>) Now <code>showDiff</code> is turned on by default whenever the <code>showDiff</code> flag is anything other than <code>false</code>.<br>\nThis issue will mostly affect plugin creators or anyone that made extensions to the core, since this affects the <code>Assertion.assert</code> method. <em>(Related Issues: <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/574\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/574\" data-id=\"123098295\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#574</a>, PRs: <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/515\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/515\" data-id=\"105986902\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#515</a>)</em></p>\n<div class=\"highlight highlight-source-js\"><pre><span class=\"pl-c\"><span class=\"pl-c\">//</span> Now whenever you call `Assertion.assert` with anything that is not false for the `showDiff` flag it will be true</span>\n<span class=\"pl-c\"><span class=\"pl-c\">//</span> The assertion error that was thrown will have the `showDiff` flag turned on since it was not passed to the `assert` method</span>\n<span class=\"pl-k\">try</span> {\n  <span class=\"pl-k\">new</span> <span class=\"pl-en\">chai.Assertion</span>().<span class=\"pl-en\">assert</span>(\n      <span class=\"pl-s\"><span class=\"pl-pds\">'</span>one<span class=\"pl-pds\">'</span></span> <span class=\"pl-k\">===</span> <span class=\"pl-s\"><span class=\"pl-pds\">'</span>two<span class=\"pl-pds\">'</span></span>\n    , <span class=\"pl-s\"><span class=\"pl-pds\">'</span>expected #{this} to equal #{exp}<span class=\"pl-pds\">'</span></span>\n    , <span class=\"pl-s\"><span class=\"pl-pds\">'</span>expected #{this} to not equal #{act}<span class=\"pl-pds\">'</span></span>\n    , <span class=\"pl-s\"><span class=\"pl-pds\">'</span>one<span class=\"pl-pds\">'</span></span>\n    , <span class=\"pl-s\"><span class=\"pl-pds\">'</span>two<span class=\"pl-pds\">'</span></span>\n  );\n} <span class=\"pl-k\">catch</span>(e) {\n  <span class=\"pl-smi\">assert</span>.<span class=\"pl-en\">isTrue</span>(<span class=\"pl-smi\">e</span>.<span class=\"pl-smi\">showDiff</span>);\n}\n\n<span class=\"pl-c\"><span class=\"pl-c\">//</span> The assertion error that was thrown will have the `showDiff` flag turned off since here we passed `false` explicitly</span>\n<span class=\"pl-k\">try</span> {\n  <span class=\"pl-k\">new</span> <span class=\"pl-en\">chai.Assertion</span>().<span class=\"pl-en\">assert</span>(\n      <span class=\"pl-s\"><span class=\"pl-pds\">'</span>one<span class=\"pl-pds\">'</span></span> <span class=\"pl-k\">===</span> <span class=\"pl-s\"><span class=\"pl-pds\">'</span>two<span class=\"pl-pds\">'</span></span>\n    , <span class=\"pl-s\"><span class=\"pl-pds\">'</span>expected #{this} to equal #{exp}<span class=\"pl-pds\">'</span></span>\n    , <span class=\"pl-s\"><span class=\"pl-pds\">'</span>expected #{this} to not equal #{act}<span class=\"pl-pds\">'</span></span>\n    , <span class=\"pl-s\"><span class=\"pl-pds\">'</span>one<span class=\"pl-pds\">'</span></span>\n    , <span class=\"pl-s\"><span class=\"pl-pds\">'</span>two<span class=\"pl-pds\">'</span></span>\n    , <span class=\"pl-c1\">false</span>\n  );\n} <span class=\"pl-k\">catch</span>(e) {\n  <span class=\"pl-smi\">assert</span>.<span class=\"pl-en\">isFalse</span>(<span class=\"pl-smi\">e</span>.<span class=\"pl-smi\">showDiff</span>);\n}</pre></div>\n</li>\n</ul>\n<h1>New Features</h1>\n<ul>\n<li>\n<p>Throw when non-existent property is read. <em>(Related Issues: <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/407\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/407\" data-id=\"63724778\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#407</a>, <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/766\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/766\" data-id=\"169763845\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#766</a> PRs: <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/721\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/721\" data-id=\"159282405\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#721</a>, <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/770\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/770\" data-id=\"171027548\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#770</a>)</em><br>\n<strong>This is a potentially breaking change. Your build will fail if you have typos in your property assertions</strong><br>\nBefore <code>4.x.x</code> when using property assertions they would not throw an error if you wrote it incorrectly.<br>\nThe example below, for example, would pass:</p>\n<div class=\"highlight highlight-source-js\"><pre><span class=\"pl-en\">expect</span>(<span class=\"pl-c1\">true</span>).<span class=\"pl-smi\">to</span>.<span class=\"pl-smi\">be</span>.<span class=\"pl-smi\">ture</span>; <span class=\"pl-c\"><span class=\"pl-c\">//</span> Oops, typo, now Chai will throw an Error</span></pre></div>\n<p>Since this implementation depends on ES6 <code>Proxies</code> it will only work on platforms that support it.</p>\n<p><strong>This property can be enabled (default) or disabled through the <code>config.useProxy</code> property</strong>, for example:</p>\n<div class=\"highlight highlight-source-js\"><pre><span class=\"pl-smi\">chai</span>.<span class=\"pl-smi\">config</span>.<span class=\"pl-smi\">useProxy</span> <span class=\"pl-k\">=</span> <span class=\"pl-c1\">false</span>;  <span class=\"pl-c\"><span class=\"pl-c\">//</span> disable use of Proxy</span></pre></div>\n</li>\n<li>\n<p>Add fix suggestions when accessing a nonexistent property in proxy mode. <em>(Related Issues: <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/771\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/771\" data-id=\"171280552\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#771</a>, PRs: <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/782\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/782\" data-id=\"174936564\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#782</a>)</em><br>\nWhen a nonexistent property is accessed in proxy mode, Chai will compute <a href=\"http://www.levenshtein.net\">the levenshtein distance</a> to all possible properties in order to suggest the best fix to the user.</p>\n<div class=\"highlight highlight-source-js\"><pre><span class=\"pl-en\">expect</span>(<span class=\"pl-c1\">false</span>).<span class=\"pl-smi\">to</span>.<span class=\"pl-smi\">be</span>.<span class=\"pl-smi\">fals</span>; <span class=\"pl-c\"><span class=\"pl-c\">//</span> Error: Invalid Chai property: fals. Did you mean \"false\"?</span>\n<span class=\"pl-en\">expect</span>(<span class=\"pl-s\"><span class=\"pl-pds\">'</span>foo<span class=\"pl-pds\">'</span></span>).<span class=\"pl-smi\">to</span>.<span class=\"pl-smi\">be</span>.<span class=\"pl-smi\">undefind</span>; <span class=\"pl-c\"><span class=\"pl-c\">//</span> Error: Invalid Chai property: undefind. Did you mean \"undefined\"?</span>\n\n<span class=\"pl-c\"><span class=\"pl-c\">//</span> If the Levenshtein distance between the word and any Chai property is greater than 4, no fix will be suggested</span>\n<span class=\"pl-en\">expect</span>(<span class=\"pl-s\"><span class=\"pl-pds\">'</span>foo<span class=\"pl-pds\">'</span></span>).<span class=\"pl-smi\">to</span>.<span class=\"pl-smi\">be</span>.<span class=\"pl-smi\">fdsakfdsafsagsadgagsdfasf</span> <span class=\"pl-c\"><span class=\"pl-c\">//</span> error thrown, no fix suggested</span></pre></div>\n</li>\n<li>\n<p>When non-chainable methods (including overwritten non-chainable methods) are used incorrectly an error will be thrown with a helpful error message. <em>(PRs: <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/789\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/789\" data-id=\"175901490\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#789</a>)</em></p>\n<div class=\"highlight highlight-source-js\"><pre><span class=\"pl-en\">expect</span>(<span class=\"pl-c1\">true</span>).<span class=\"pl-smi\">to</span>.<span class=\"pl-smi\">equal</span>.<span class=\"pl-smi\">true</span>;  <span class=\"pl-c\"><span class=\"pl-c\">//</span> Invalid Chai property: equal.true. See docs for proper usage of \"equal\".</span></pre></div>\n</li>\n<li>\n<p>Add a new configuration setting that describes which keys will be ignored when checking for non-existing properties on an assertion before throwing an error.<br>\nSince this implementation depends on ES6 <code>Proxies</code> it will only work on platforms that support it. Also, if you disable <code>config.useProxy</code>, this setting will have no effect. <em>(Related Issues: <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/765\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/765\" data-id=\"169763639\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#765</a>, PRs: <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/774\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/774\" data-id=\"172810776\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#774</a>)</em></p>\n<div class=\"highlight highlight-source-js\"><pre><span class=\"pl-smi\">chai</span>.<span class=\"pl-smi\">config</span>.<span class=\"pl-smi\">proxyExcludedKeys</span>.<span class=\"pl-c1\">push</span>(<span class=\"pl-s\"><span class=\"pl-pds\">'</span>nonExistingProp<span class=\"pl-pds\">'</span></span>);\n\n<span class=\"pl-en\">expect</span>(<span class=\"pl-s\"><span class=\"pl-pds\">'</span>my string<span class=\"pl-pds\">'</span></span>).<span class=\"pl-smi\">to</span>.<span class=\"pl-smi\">nonExistingProp</span>; <span class=\"pl-c\"><span class=\"pl-c\">//</span> This won't throw an error now</span></pre></div>\n</li>\n<li>\n<p>Add script that registers should as a side-effect. <em>(Related Issues: <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/594\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/594\" data-id=\"127939537\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#594</a>, <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/693\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/693\" data-id=\"152419375\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#693</a> PRs: <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/604\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/604\" data-id=\"129843769\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#604</a>)</em></p>\n<div class=\"highlight highlight-source-js\"><pre><span class=\"pl-c\"><span class=\"pl-c\">//</span> You can now write:</span>\n<span class=\"pl-k\">import</span> <span class=\"pl-s\"><span class=\"pl-pds\">'</span>chai/should<span class=\"pl-pds\">'</span></span>;\n\n<span class=\"pl-c\"><span class=\"pl-c\">//</span> as opposed to:</span>\n<span class=\"pl-k\">import</span> {<span class=\"pl-smi\">should</span>} <span class=\"pl-k\">from</span> <span class=\"pl-s\"><span class=\"pl-pds\">'</span>chai<span class=\"pl-pds\">'</span></span>;\n<span class=\"pl-en\">should</span>();</pre></div>\n<p>You can also register should via a <code>mocha</code> option: <code>mocha --require chai/should</code>.</p>\n</li>\n<li>\n<p>The <code>change</code> assertion accepts a function as object. <em>(Related Issues: <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/544\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/544\" data-id=\"113691677\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#544</a>, PRs: <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/607\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/607\" data-id=\"130506143\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#607</a>)</em></p>\n<div class=\"highlight highlight-source-js\"><pre><span class=\"pl-c\"><span class=\"pl-c\">//</span> Now you can also check if the return value of a function changes, for example</span>\n<span class=\"pl-smi\">assert</span>.<span class=\"pl-en\">increases</span>(\n  someOperation,\n  () <span class=\"pl-k\">=&gt;</span> <span class=\"pl-en\">getSomething</span>().<span class=\"pl-c1\">length</span>\n)</pre></div>\n</li>\n<li>\n<p>You can also assert for a delta using the <code>by</code> assertion alongside the <code>change</code>, <code>increase</code> and <code>decrease</code> assertions. <em>(Related Issues: <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/339\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/339\" data-id=\"53275197\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#339</a>, PRs: <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/621\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/621\" data-id=\"133338172\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#621</a>)</em></p>\n</li>\n</ul>\n<div class=\"highlight highlight-source-js\"><pre><span class=\"pl-c\"><span class=\"pl-c\">//</span> You can use `.by` to assert the amount you want something to change</span>\n<span class=\"pl-k\">var</span> obj <span class=\"pl-k\">=</span> { val<span class=\"pl-k\">:</span> <span class=\"pl-c1\">10</span> };\n<span class=\"pl-k\">var</span> <span class=\"pl-en\">increaseByTwo</span> <span class=\"pl-k\">=</span> <span class=\"pl-k\">function</span>() { <span class=\"pl-smi\">obj</span>.<span class=\"pl-smi\">val</span> <span class=\"pl-k\">+=</span> <span class=\"pl-c1\">2</span> };\n<span class=\"pl-k\">var</span> <span class=\"pl-en\">decreaseByTwo</span> <span class=\"pl-k\">=</span> <span class=\"pl-k\">function</span>() { <span class=\"pl-smi\">obj</span>.<span class=\"pl-smi\">val</span> <span class=\"pl-k\">-=</span> <span class=\"pl-c1\">2</span> };\n<span class=\"pl-k\">var</span> <span class=\"pl-en\">increaseByThree</span> <span class=\"pl-k\">=</span> <span class=\"pl-k\">function</span>() { <span class=\"pl-smi\">obj</span>.<span class=\"pl-smi\">val</span> <span class=\"pl-k\">+=</span> <span class=\"pl-c1\">3</span> };\n\n<span class=\"pl-en\">expect</span>(increaseByThree).<span class=\"pl-smi\">to</span>.<span class=\"pl-en\">change</span>(obj, <span class=\"pl-s\"><span class=\"pl-pds\">'</span>val<span class=\"pl-pds\">'</span></span>).<span class=\"pl-en\">by</span>(<span class=\"pl-c1\">3</span>);\n<span class=\"pl-en\">expect</span>(increaseByTwo).<span class=\"pl-smi\">to</span>.<span class=\"pl-en\">increase</span>(obj, <span class=\"pl-s\"><span class=\"pl-pds\">'</span>val<span class=\"pl-pds\">'</span></span>).<span class=\"pl-en\">by</span>(<span class=\"pl-c1\">2</span>);\n<span class=\"pl-en\">expect</span>(decreaseByTwo).<span class=\"pl-smi\">to</span>.<span class=\"pl-en\">decrease</span>(obj, <span class=\"pl-s\"><span class=\"pl-pds\">'</span>val<span class=\"pl-pds\">'</span></span>).<span class=\"pl-en\">by</span>(<span class=\"pl-c1\">2</span>);\n\n<span class=\"pl-c\"><span class=\"pl-c\">//</span> Please notice that if you want to assert something did change but not by some amount you need to use `.not` **after** the `change` related assertion</span>\n<span class=\"pl-c\"><span class=\"pl-c\">//</span> Take a look at the examples below:</span>\n<span class=\"pl-en\">expect</span>(increaseByThree).<span class=\"pl-smi\">to</span>.<span class=\"pl-en\">change</span>(obj, <span class=\"pl-s\"><span class=\"pl-pds\">'</span>val<span class=\"pl-pds\">'</span></span>).<span class=\"pl-smi\">but</span>.<span class=\"pl-smi\">not</span>.<span class=\"pl-en\">by</span>(<span class=\"pl-c1\">5</span>)\n<span class=\"pl-en\">expect</span>(increaseByTwo).<span class=\"pl-smi\">to</span>.<span class=\"pl-en\">increase</span>(obj, <span class=\"pl-s\"><span class=\"pl-pds\">'</span>val<span class=\"pl-pds\">'</span></span>).<span class=\"pl-smi\">but</span>.<span class=\"pl-smi\">not</span>.<span class=\"pl-en\">by</span>(<span class=\"pl-c1\">1</span>)\n<span class=\"pl-en\">expect</span>(decreaseByTwo).<span class=\"pl-smi\">to</span>.<span class=\"pl-en\">decrease</span>(obj, <span class=\"pl-s\"><span class=\"pl-pds\">'</span>val<span class=\"pl-pds\">'</span></span>).<span class=\"pl-smi\">but</span>.<span class=\"pl-smi\">not</span>.<span class=\"pl-en\">by</span>(<span class=\"pl-c1\">1</span>)</pre></div>\n<ul>\n<li>The <code>.keys</code> assertion can now operate on <code>map</code>s and <code>set</code>s. <em>(Related Issues: <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/632\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/632\" data-id=\"138444413\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#632</a>, PRs: <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/633\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/633\" data-id=\"139090774\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#633</a>, <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/668\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/668\" data-id=\"146439679\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#668</a>)</em></li>\n</ul>\n<div class=\"highlight highlight-source-js\"><pre><span class=\"pl-c\"><span class=\"pl-c\">//</span> The `.keys` assertion now works on `map`s and `set`s natively, like the examples below:</span>\n<span class=\"pl-en\">expect</span>(<span class=\"pl-k\">new</span> <span class=\"pl-en\">Map</span>([[{objKey<span class=\"pl-k\">:</span> <span class=\"pl-s\"><span class=\"pl-pds\">'</span>value<span class=\"pl-pds\">'</span></span>}, <span class=\"pl-s\"><span class=\"pl-pds\">'</span>value<span class=\"pl-pds\">'</span></span>], [<span class=\"pl-c1\">1</span>, <span class=\"pl-c1\">2</span>]])).<span class=\"pl-smi\">to</span>.<span class=\"pl-smi\">contain</span>.<span class=\"pl-c1\">key</span>({objKey<span class=\"pl-k\">:</span> <span class=\"pl-s\"><span class=\"pl-pds\">'</span>value<span class=\"pl-pds\">'</span></span>});\n<span class=\"pl-en\">expect</span>(<span class=\"pl-k\">new</span> <span class=\"pl-en\">Map</span>([[{objKey<span class=\"pl-k\">:</span> <span class=\"pl-s\"><span class=\"pl-pds\">'</span>value<span class=\"pl-pds\">'</span></span>}, <span class=\"pl-s\"><span class=\"pl-pds\">'</span>value<span class=\"pl-pds\">'</span></span>], [<span class=\"pl-c1\">1</span>, <span class=\"pl-c1\">2</span>]])).<span class=\"pl-smi\">to</span>.<span class=\"pl-smi\">contain</span>.<span class=\"pl-smi\">any</span>.<span class=\"pl-c1\">keys</span>([{objKey<span class=\"pl-k\">:</span> <span class=\"pl-s\"><span class=\"pl-pds\">'</span>value<span class=\"pl-pds\">'</span></span>}, {anotherKey<span class=\"pl-k\">:</span> <span class=\"pl-s\"><span class=\"pl-pds\">'</span>anotherValue<span class=\"pl-pds\">'</span></span>}]);\n<span class=\"pl-en\">expect</span>(<span class=\"pl-k\">new</span> <span class=\"pl-en\">Map</span>([[<span class=\"pl-s\"><span class=\"pl-pds\">'</span>firstKey<span class=\"pl-pds\">'</span></span>, <span class=\"pl-s\"><span class=\"pl-pds\">'</span>firstValue<span class=\"pl-pds\">'</span></span>], [<span class=\"pl-c1\">1</span>, <span class=\"pl-c1\">2</span>]])).<span class=\"pl-smi\">to</span>.<span class=\"pl-smi\">contain</span>.<span class=\"pl-c1\">all</span>.<span class=\"pl-c1\">keys</span>(<span class=\"pl-s\"><span class=\"pl-pds\">'</span>firstKey<span class=\"pl-pds\">'</span></span>, <span class=\"pl-c1\">1</span>);\n<span class=\"pl-en\">expect</span>(<span class=\"pl-k\">new</span> <span class=\"pl-en\">Set</span>([[<span class=\"pl-s\"><span class=\"pl-pds\">'</span>foo<span class=\"pl-pds\">'</span></span>, <span class=\"pl-s\"><span class=\"pl-pds\">'</span>bar<span class=\"pl-pds\">'</span></span>], [<span class=\"pl-s\"><span class=\"pl-pds\">'</span>example<span class=\"pl-pds\">'</span></span>, <span class=\"pl-c1\">1</span>]])).<span class=\"pl-smi\">to</span>.<span class=\"pl-smi\">have</span>.<span class=\"pl-smi\">any</span>.<span class=\"pl-c1\">keys</span>(<span class=\"pl-s\"><span class=\"pl-pds\">'</span>foo<span class=\"pl-pds\">'</span></span>);\n\n<span class=\"pl-c\"><span class=\"pl-c\">//</span> You can also use `.deep` when asserting agains `Map`s and `Set`s</span>\n<span class=\"pl-en\">expect</span>(<span class=\"pl-k\">new</span> <span class=\"pl-en\">Map</span>([[{objKey<span class=\"pl-k\">:</span> <span class=\"pl-s\"><span class=\"pl-pds\">'</span>value<span class=\"pl-pds\">'</span></span>}, <span class=\"pl-s\"><span class=\"pl-pds\">'</span>value<span class=\"pl-pds\">'</span></span>], [<span class=\"pl-c1\">1</span>, <span class=\"pl-c1\">2</span>]])).<span class=\"pl-smi\">to</span>.<span class=\"pl-smi\">contain</span>.<span class=\"pl-smi\">any</span>.<span class=\"pl-smi\">deep</span>.<span class=\"pl-c1\">keys</span>([{objKey<span class=\"pl-k\">:</span> <span class=\"pl-s\"><span class=\"pl-pds\">'</span>value<span class=\"pl-pds\">'</span></span>}, {anotherKey<span class=\"pl-k\">:</span> <span class=\"pl-s\"><span class=\"pl-pds\">'</span>anotherValue<span class=\"pl-pds\">'</span></span>}]);\n<span class=\"pl-en\">expect</span>(<span class=\"pl-k\">new</span> <span class=\"pl-en\">Map</span>([[<span class=\"pl-s\"><span class=\"pl-pds\">'</span>firstKey<span class=\"pl-pds\">'</span></span>, <span class=\"pl-s\"><span class=\"pl-pds\">'</span>firstValue<span class=\"pl-pds\">'</span></span>], [<span class=\"pl-c1\">1</span>, <span class=\"pl-c1\">2</span>]])).<span class=\"pl-smi\">to</span>.<span class=\"pl-smi\">contain</span>.<span class=\"pl-c1\">all</span>.<span class=\"pl-smi\">deep</span>.<span class=\"pl-c1\">keys</span>(<span class=\"pl-s\"><span class=\"pl-pds\">'</span>firstKey<span class=\"pl-pds\">'</span></span>, <span class=\"pl-c1\">1</span>);\n<span class=\"pl-en\">expect</span>(<span class=\"pl-k\">new</span> <span class=\"pl-en\">Set</span>([[<span class=\"pl-s\"><span class=\"pl-pds\">'</span>foo<span class=\"pl-pds\">'</span></span>, <span class=\"pl-s\"><span class=\"pl-pds\">'</span>bar<span class=\"pl-pds\">'</span></span>], [<span class=\"pl-s\"><span class=\"pl-pds\">'</span>example<span class=\"pl-pds\">'</span></span>, <span class=\"pl-c1\">1</span>]])).<span class=\"pl-smi\">to</span>.<span class=\"pl-smi\">have</span>.<span class=\"pl-smi\">any</span>.<span class=\"pl-smi\">deep</span>.<span class=\"pl-c1\">keys</span>(<span class=\"pl-s\"><span class=\"pl-pds\">'</span>foo<span class=\"pl-pds\">'</span></span>);</pre></div>\n<ul>\n<li>\n<p>Add compatibility with strict mode. <em>(Related Issues: <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/578\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/578\" data-id=\"123755685\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#578</a>, PRs: <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/665\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/665\" data-id=\"146172049\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#665</a>)</em></p>\n<div class=\"highlight highlight-source-js\"><pre><span class=\"pl-c\"><span class=\"pl-c\">//</span> This means you can now run your code with the `--use_strict` flag on Node</span>\n<span class=\"pl-c\"><span class=\"pl-c\">//</span> If want to understand more about this please read the issue related to this change</span></pre></div>\n</li>\n<li>\n<p>Add <code>does</code> and <code>but</code> as new no-op assertion. <em>(Related Issues: <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/700\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/700\" data-id=\"153526519\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#700</a>, <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/339\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/339\" data-id=\"53275197\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#339</a> PRs: <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/621\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/621\" data-id=\"133338172\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#621</a>, <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/701\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/701\" data-id=\"153557864\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#701</a>)</em></p>\n<div class=\"highlight highlight-source-js\"><pre><span class=\"pl-c\"><span class=\"pl-c\">//</span> You can now write assertions forming phrases with these two new words:</span>\n<span class=\"pl-en\">expect</span>(increaseByThree).<span class=\"pl-smi\">to</span>.<span class=\"pl-en\">change</span>(obj, <span class=\"pl-s\"><span class=\"pl-pds\">'</span>val<span class=\"pl-pds\">'</span></span>).<span class=\"pl-smi\">but</span>.<span class=\"pl-smi\">not</span>.<span class=\"pl-en\">by</span>(<span class=\"pl-c1\">5</span>);\n<span class=\"pl-en\">expect</span>(foobar).<span class=\"pl-smi\">to</span>.<span class=\"pl-smi\">have</span>.<span class=\"pl-en\">property</span>(<span class=\"pl-s\"><span class=\"pl-pds\">\"</span>baz<span class=\"pl-pds\">\"</span></span>).<span class=\"pl-smi\">which</span>.<span class=\"pl-smi\">does</span>.<span class=\"pl-smi\">not</span>.<span class=\"pl-smi\">have</span>.<span class=\"pl-en\">property</span>(<span class=\"pl-s\"><span class=\"pl-pds\">\"</span>thing<span class=\"pl-pds\">\"</span></span>);</pre></div>\n</li>\n<li>\n<p>Allow <code>use</code> to be imported using new ES6 module syntax. <em>(Related Issues: <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/718\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/718\" data-id=\"158570364\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#718</a>, PRs: <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/724\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/724\" data-id=\"159517744\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#724</a>)</em></p>\n<div class=\"highlight highlight-source-js\"><pre><span class=\"pl-c\"><span class=\"pl-c\">//</span> You can now import `use` using the ES6 module syntax, like the example below:</span>\n<span class=\"pl-k\">import</span> <span class=\"pl-smi\">sinonChai</span> <span class=\"pl-k\">from</span> <span class=\"pl-s\"><span class=\"pl-pds\">\"</span>sinon-chai<span class=\"pl-pds\">\"</span></span>;\n<span class=\"pl-k\">import</span> {<span class=\"pl-smi\">expect</span>, <span class=\"pl-smi\">use</span>} <span class=\"pl-k\">from</span> <span class=\"pl-s\"><span class=\"pl-pds\">\"</span>chai<span class=\"pl-pds\">\"</span></span>;\n\n<span class=\"pl-en\">use</span>(sinonChai);</pre></div>\n<p>You can also use <code>require</code> alongside the new ES6 destructuring feature:</p>\n<div class=\"highlight highlight-source-js\"><pre><span class=\"pl-k\">const</span> <span class=\"pl-c1\">sinonChai</span> <span class=\"pl-k\">=</span> <span class=\"pl-c1\">require</span>(<span class=\"pl-s\"><span class=\"pl-pds\">'</span>sinon-chai<span class=\"pl-pds\">'</span></span>);\n<span class=\"pl-k\">const</span> {<span class=\"pl-c1\">expect</span>, <span class=\"pl-c1\">use</span>} <span class=\"pl-k\">=</span> <span class=\"pl-c1\">require</span>(<span class=\"pl-s\"><span class=\"pl-pds\">\"</span>chai<span class=\"pl-pds\">\"</span></span>);\n\n<span class=\"pl-en\">use</span>(sinonChai);</pre></div>\n</li>\n<li>\n<p>Add ordered flag for members assertion. <em>(Related Issues: <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/717\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/717\" data-id=\"158490838\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#717</a>, PRs: <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/728\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/728\" data-id=\"159838811\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#728</a>)</em></p>\n<div class=\"highlight highlight-source-js\"><pre><span class=\"pl-c\"><span class=\"pl-c\">//</span> You can now use the `ordered` flag to assert the order of elements when using the `members` assertion:</span>\n<span class=\"pl-en\">expect</span>([<span class=\"pl-c1\">1</span>, <span class=\"pl-c1\">2</span>, <span class=\"pl-c1\">3</span>]).<span class=\"pl-smi\">to</span>.<span class=\"pl-smi\">include</span>.<span class=\"pl-smi\">ordered</span>.<span class=\"pl-en\">members</span>([<span class=\"pl-c1\">1</span>, <span class=\"pl-c1\">2</span>]); <span class=\"pl-c\"><span class=\"pl-c\">//</span> This passes</span>\n<span class=\"pl-en\">expect</span>([<span class=\"pl-c1\">1</span>, <span class=\"pl-c1\">2</span>, <span class=\"pl-c1\">3</span>]).<span class=\"pl-smi\">to</span>.<span class=\"pl-smi\">include</span>.<span class=\"pl-smi\">ordered</span>.<span class=\"pl-en\">members</span>([<span class=\"pl-c1\">2</span>, <span class=\"pl-c1\">3</span>]); <span class=\"pl-c\"><span class=\"pl-c\">//</span> This will fail! Read the docs to know more.</span></pre></div>\n</li>\n<li>\n<p>Add <code>.own</code> flag to <code>.property</code> assertion. It does the same thing as <code>.ownProperty</code> and cannot be used alongisde the new <code>.nested</code> flag. <em>(Related Issues: <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/795\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/795\" data-id=\"176197771\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#795</a>, PRs: <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/810\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/810\" data-id=\"179744777\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#810</a>)</em></p>\n<div class=\"highlight highlight-source-js\"><pre><span class=\"pl-en\">expect</span>({a<span class=\"pl-k\">:</span> <span class=\"pl-c1\">1</span>}).<span class=\"pl-smi\">to</span>.<span class=\"pl-smi\">have</span>.<span class=\"pl-smi\">own</span>.<span class=\"pl-en\">property</span>(<span class=\"pl-s\"><span class=\"pl-pds\">'</span>a<span class=\"pl-pds\">'</span></span>);\n\n<span class=\"pl-c\"><span class=\"pl-c\">//</span> The example below will thrown an Error</span>\n<span class=\"pl-en\">expect</span>({a<span class=\"pl-k\">:</span> {b<span class=\"pl-k\">:</span> <span class=\"pl-c1\">1</span>}}).<span class=\"pl-smi\">to</span>.<span class=\"pl-smi\">have</span>.<span class=\"pl-smi\">own</span>.<span class=\"pl-smi\">nested</span>.<span class=\"pl-en\">property</span>(<span class=\"pl-s\"><span class=\"pl-pds\">'</span>a.b<span class=\"pl-pds\">'</span></span>, <span class=\"pl-c1\">1</span>);</pre></div>\n</li>\n<li>\n<p>Add <code>.deep</code> support to <code>.property</code> assertion. <em>(Related Issues: <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/795\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/795\" data-id=\"176197771\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#795</a>, PRs: <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/810\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/810\" data-id=\"179744777\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#810</a>)</em></p>\n<div class=\"highlight highlight-source-js\"><pre><span class=\"pl-en\">expect</span>({ foo<span class=\"pl-k\">:</span> { bar<span class=\"pl-k\">:</span> <span class=\"pl-s\"><span class=\"pl-pds\">'</span>baz<span class=\"pl-pds\">'</span></span> } }).<span class=\"pl-smi\">to</span>.<span class=\"pl-smi\">have</span>.<span class=\"pl-smi\">deep</span>.<span class=\"pl-smi\">own</span>.<span class=\"pl-en\">property</span>(<span class=\"pl-s\"><span class=\"pl-pds\">'</span>foo<span class=\"pl-pds\">'</span></span>, { bar<span class=\"pl-k\">:</span> <span class=\"pl-s\"><span class=\"pl-pds\">'</span>baz<span class=\"pl-pds\">'</span></span> });\n<span class=\"pl-en\">expect</span>({ foo<span class=\"pl-k\">:</span> { bar<span class=\"pl-k\">:</span> { baz<span class=\"pl-k\">:</span> <span class=\"pl-s\"><span class=\"pl-pds\">'</span>quux<span class=\"pl-pds\">'</span></span> } } }).<span class=\"pl-smi\">to</span>.<span class=\"pl-smi\">have</span>.<span class=\"pl-smi\">deep</span>.<span class=\"pl-smi\">nested</span>.<span class=\"pl-en\">property</span>(<span class=\"pl-s\"><span class=\"pl-pds\">'</span>foo.bar<span class=\"pl-pds\">'</span></span>, { baz<span class=\"pl-k\">:</span> <span class=\"pl-s\"><span class=\"pl-pds\">'</span>quux<span class=\"pl-pds\">'</span></span> });</pre></div>\n</li>\n<li>\n<p>The <code>.empty</code> assertion will now work with ES6 collections <em>(PRs: <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/763\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/763\" data-id=\"168742416\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#763</a>, <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/812\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/812\" data-id=\"180394986\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#812</a>, <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/814\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/814\" data-id=\"180523099\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#814</a>)</em><br>\nPlease notice that this assertion will throw an error when it is passed a <code>WeakMap</code> or <code>WeakSet</code>.</p>\n<div class=\"highlight highlight-source-js\"><pre><span class=\"pl-en\">expect</span>(<span class=\"pl-k\">new</span> <span class=\"pl-en\">Set</span>()).<span class=\"pl-smi\">to</span>.<span class=\"pl-smi\">be</span>.<span class=\"pl-smi\">empty</span>;\n<span class=\"pl-en\">expect</span>(<span class=\"pl-k\">new</span> <span class=\"pl-en\">Map</span>()).<span class=\"pl-smi\">to</span>.<span class=\"pl-smi\">be</span>.<span class=\"pl-smi\">empty</span>;\n\n<span class=\"pl-c\"><span class=\"pl-c\">//</span> The examples below will throw a TypeError:</span>\n<span class=\"pl-en\">expect</span>(<span class=\"pl-k\">new</span> <span class=\"pl-en\">WeakSet</span>()).<span class=\"pl-smi\">to</span>.<span class=\"pl-smi\">be</span>.<span class=\"pl-smi\">empty</span>;\n<span class=\"pl-en\">expect</span>(<span class=\"pl-k\">new</span> <span class=\"pl-en\">WeakMap</span>()).<span class=\"pl-smi\">to</span>.<span class=\"pl-smi\">be</span>.<span class=\"pl-smi\">empty</span>;</pre></div>\n</li>\n<li>\n<p>Add script that registers <code>should</code> as a side-effect. This change allows you to register <code>should</code> via a mocha option by using: <code>mocha spec.js -r chai/register-should</code> and also allows you to register the testing style globally. <em>(Issues: <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/693\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/693\" data-id=\"152419375\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#693</a>, PRs: <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/868\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/868\" data-id=\"189684113\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#868</a>)</em></p>\n<div class=\"highlight highlight-source-js\"><pre><span class=\"pl-c1\">require</span>(<span class=\"pl-s\"><span class=\"pl-pds\">'</span>chai/register-should<span class=\"pl-pds\">'</span></span>);  <span class=\"pl-c\"><span class=\"pl-c\">//</span> Using Should style</span></pre></div>\n</li>\n<li>\n<p>Add script that registers <code>assert</code> as a side-effect. This change allows you to register <code>assert</code> via a mocha option by using: <code>mocha spec.js -r chai/register-assert</code> <em>(Issues: <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/693\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/693\" data-id=\"152419375\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#693</a>, PRs: <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/868\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/868\" data-id=\"189684113\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#868</a>, <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/872\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/872\" data-id=\"190330889\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#872</a>)</em></p>\n</li>\n</ul>\n<div class=\"highlight highlight-source-js\"><pre><span class=\"pl-c1\">require</span>(<span class=\"pl-s\"><span class=\"pl-pds\">'</span>chai/register-assert<span class=\"pl-pds\">'</span></span>);  <span class=\"pl-c\"><span class=\"pl-c\">//</span> Using Assert style</span></pre></div>\n<ul>\n<li>\n<p>Add script that registers <code>expect</code> as a side-effect. This change allows you to register <code>expect</code> via a mocha option by using: <code>mocha spec.js -r chai/register-expect</code> <em>(Issues: <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/693\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/693\" data-id=\"152419375\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#693</a>, PRs: <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/868\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/868\" data-id=\"189684113\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#868</a>, <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/872\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/872\" data-id=\"190330889\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#872</a>)</em></p>\n<div class=\"highlight highlight-source-js\"><pre><span class=\"pl-c1\">require</span>(<span class=\"pl-s\"><span class=\"pl-pds\">'</span>chai/register-expect<span class=\"pl-pds\">'</span></span>);  <span class=\"pl-c\"><span class=\"pl-c\">//</span> Using Expect style</span></pre></div>\n</li>\n<li>\n<p>When the <code>length</code> assertion is chained directly off of an uninvoked method, it references <code>function</code>'s built-in <code>length</code> property instead of Chai's <code>length</code> assertion. This commit adds a guard to Chai methods to detect this problem and throw a helpful error message that advises the user on how to correct it. <em>(Issues: <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/684\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/684\" data-id=\"150141243\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#684</a>, <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/841\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/841\" data-id=\"182152819\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#841</a>, PRs: <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/897\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/897\" data-id=\"198359389\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#897</a>)</em></p>\n</li>\n<li>\n<p>Allows the <code>lockSsfi</code> flag to be set when creating new Assertion. This flag controls whether or not the given <code>ssfi</code> flag should retain its current value, even as assertions are chained off of this object. This is usually set to <code>true</code> when creating a new assertion from within another assertion. It's also temporarily set to <code>true</code> before an overwritten assertion gets called by the overwriting assertion. <em>(Issues: <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/878\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/878\" data-id=\"193012424\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#878</a>, <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/904\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/904\" data-id=\"201134525\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#904</a>, PRs: <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/922\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/922\" data-id=\"203905562\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#922</a>)</em></p>\n<div class=\"highlight highlight-source-js\"><pre><span class=\"pl-c\"><span class=\"pl-c\">//</span> This will lock the stack stack function from this line on</span>\n<span class=\"pl-c\"><span class=\"pl-c\">//</span> The SSFI is the reference to the starting point for removing irrelevant frames from the stack trace</span>\n<span class=\"pl-k\">new</span> <span class=\"pl-en\">Assertion</span>(obj, msg, ssfi, <span class=\"pl-c1\">true</span>).<span class=\"pl-smi\">to</span>.<span class=\"pl-smi\">have</span>.<span class=\"pl-en\">property</span>(<span class=\"pl-s\"><span class=\"pl-pds\">'</span>length<span class=\"pl-pds\">'</span></span>)</pre></div>\n</li>\n<li>\n<p>The <code>nestedInclude</code>, <code>deepNestedInclude</code>, <code>ownInclude</code> and <code>deepOwnInclude</code> assertions and there negated pairs were added to the <code>assert</code> interface. <em>(Issues: <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/905\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/905\" data-id=\"201588232\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#905</a>, PRs: <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/964\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/964\" data-id=\"226313828\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#964</a>)</em></p>\n<div class=\"highlight highlight-source-js\"><pre><span class=\"pl-c\"><span class=\"pl-c\">//</span> '[]' and '.' in property names can be escaped using double backslashes.</span>\n\n<span class=\"pl-smi\">assert</span>.<span class=\"pl-en\">nestedInclude</span>({<span class=\"pl-s\"><span class=\"pl-pds\">'</span>.a<span class=\"pl-pds\">'</span></span><span class=\"pl-k\">:</span> {<span class=\"pl-s\"><span class=\"pl-pds\">'</span>b<span class=\"pl-pds\">'</span></span><span class=\"pl-k\">:</span> <span class=\"pl-s\"><span class=\"pl-pds\">'</span>x<span class=\"pl-pds\">'</span></span>}}, {<span class=\"pl-s\"><span class=\"pl-pds\">'</span><span class=\"pl-cce\">\\\\</span>.a.[b]<span class=\"pl-pds\">'</span></span><span class=\"pl-k\">:</span> <span class=\"pl-s\"><span class=\"pl-pds\">'</span>x<span class=\"pl-pds\">'</span></span>});\n<span class=\"pl-smi\">assert</span>.<span class=\"pl-en\">notNestedInclude</span>({<span class=\"pl-s\"><span class=\"pl-pds\">'</span>.a<span class=\"pl-pds\">'</span></span><span class=\"pl-k\">:</span> {<span class=\"pl-s\"><span class=\"pl-pds\">'</span>b<span class=\"pl-pds\">'</span></span><span class=\"pl-k\">:</span> <span class=\"pl-s\"><span class=\"pl-pds\">'</span>x<span class=\"pl-pds\">'</span></span>}}, {<span class=\"pl-s\"><span class=\"pl-pds\">'</span><span class=\"pl-cce\">\\\\</span>.a.b<span class=\"pl-pds\">'</span></span><span class=\"pl-k\">:</span> <span class=\"pl-s\"><span class=\"pl-pds\">'</span>y<span class=\"pl-pds\">'</span></span>});\n\n<span class=\"pl-smi\">assert</span>.<span class=\"pl-en\">deepNestedInclude</span>({a<span class=\"pl-k\">:</span> {b<span class=\"pl-k\">:</span> [{x<span class=\"pl-k\">:</span> <span class=\"pl-c1\">1</span>}]}}, {<span class=\"pl-s\"><span class=\"pl-pds\">'</span>a.b[0]<span class=\"pl-pds\">'</span></span><span class=\"pl-k\">:</span> {x<span class=\"pl-k\">:</span> <span class=\"pl-c1\">1</span>}});\n<span class=\"pl-smi\">assert</span>.<span class=\"pl-en\">notDeepNestedInclude</span>({a<span class=\"pl-k\">:</span> {b<span class=\"pl-k\">:</span> [{x<span class=\"pl-k\">:</span> <span class=\"pl-c1\">1</span>}]}}, {<span class=\"pl-s\"><span class=\"pl-pds\">'</span>a.b[0]<span class=\"pl-pds\">'</span></span><span class=\"pl-k\">:</span> {y<span class=\"pl-k\">:</span> <span class=\"pl-c1\">1</span>}});\n\n<span class=\"pl-smi\">assert</span>.<span class=\"pl-en\">ownInclude</span>({ a<span class=\"pl-k\">:</span> <span class=\"pl-c1\">1</span> }, { a<span class=\"pl-k\">:</span> <span class=\"pl-c1\">1</span> });\n<span class=\"pl-smi\">assert</span>.<span class=\"pl-en\">notOwnInclude</span>({ a<span class=\"pl-k\">:</span> <span class=\"pl-c1\">1</span> }, { b<span class=\"pl-k\">:</span> <span class=\"pl-c1\">2</span> });\n\n<span class=\"pl-smi\">assert</span>.<span class=\"pl-en\">deepOwnInclude</span>({a<span class=\"pl-k\">:</span> {b<span class=\"pl-k\">:</span> <span class=\"pl-c1\">2</span>}}, {a<span class=\"pl-k\">:</span> {b<span class=\"pl-k\">:</span> <span class=\"pl-c1\">2</span>}});\n<span class=\"pl-smi\">assert</span>.<span class=\"pl-en\">notDeepOwnInclude</span>({a<span class=\"pl-k\">:</span> {b<span class=\"pl-k\">:</span> <span class=\"pl-c1\">2</span>}}, {a<span class=\"pl-k\">:</span> {c<span class=\"pl-k\">:</span> <span class=\"pl-c1\">3</span>}});</pre></div>\n</li>\n</ul>\n<h1>Bug Fixes</h1>\n<ul>\n<li>Fix missing msg argument for change related assertions. <em>(Related Issues: None, PRs: <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/606\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/606\" data-id=\"130142084\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#606</a>)</em></li>\n<li>The addMethod function returns a new assertion with flags copied over instead of <code>this</code>. <em>(Related Issues: <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/562\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/562\" data-id=\"120850326\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#562</a>, <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/684\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/684\" data-id=\"150141243\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#684</a>, <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/723\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/723\" data-id=\"159510288\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#723</a>, PRs: <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/642\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/642\" data-id=\"141414144\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#642</a>, <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/660\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/660\" data-id=\"145196763\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#660</a>)</em></li>\n<li>Fix stacktraces for overwritten properties and methods. <em>(Related Issues: <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/659\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/659\" data-id=\"145176229\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#659</a>, <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/661\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/661\" data-id=\"145209434\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#661</a>)</em></li>\n<li>Fix bug when testing Symbol equality with should syntax. <em>(Related Issues: <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/669\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/669\" data-id=\"146475147\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#669</a>, PRs: <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/672\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/672\" data-id=\"146784591\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#672</a>)</em></li>\n<li>Fix bug when asserting some valid ES6 keys. <em>(Related Issues: <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/674\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/674\" data-id=\"147060487\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#674</a>, PRs: <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/676\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/676\" data-id=\"147171422\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#676</a>)</em></li>\n<li>Fix bug caused when custom inspect method is used and this method calls stylize. <em>(PRs: <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/680\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/680\" data-id=\"148949255\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#680</a>)</em></li>\n<li>Fix ownProperty on objects with no prototype. <em>(Related Issues: <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/688\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/688\" data-id=\"150683977\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#688</a>, PRs: <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/689\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/689\" data-id=\"150722956\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#689</a>)</em></li>\n<li>Fix swapped expected and actual results for the <code>.members</code> assertion. <em>(Related Issues: <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/511\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/511\" data-id=\"104232313\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#511</a>, PRs: <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/702\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/702\" data-id=\"154016335\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#702</a>)</em></li>\n<li>Fix <code>same.members</code> to properly handle duplicates by treating each one as a unique member. <em>(Related Issues: <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/590\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/590\" data-id=\"126052238\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#590</a>, PRs: <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/739\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/739\" data-id=\"162255322\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#739</a>)</em></li>\n<li>Fix deep.have.same.members() that was not printing a diff. <em>(PRs: <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/509\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/509\" data-id=\"103812887\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#509</a>)</em></li>\n<li>Diff will be shown for assert's equal and notEqual methods. <em>(Related Issues: <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/790\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/790\" data-id=\"175964904\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#790</a>, PRs: <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/794\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/794\" data-id=\"176188387\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#794</a>)</em></li>\n<li>The <code>overwriteMethod</code>, <code>overwriteProperty</code>, <code>addChainableMethod</code>, <code>overwriteChainableMethod</code> functions will return new assertion with flags copied over instead of this. <em>(Related Issues: <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/562\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/562\" data-id=\"120850326\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#562</a>, <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/642\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/642\" data-id=\"141414144\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#642</a>, <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/791\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/791\" data-id=\"176000588\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#791</a>, PRs: <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/799\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/799\" data-id=\"176797067\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#799</a>)</em></li>\n<li>Proxy-related implementation frames were showing up in the stack traces for failed property assertions. Now we remove them by setting the proxy getter (instead of the property getter) as the starting point to remove all implementation frames. <em>(PRs: <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/884\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/884\" data-id=\"194861617\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#884</a>)</em></li>\n<li>Negated <code>keys</code> assertions will now consider size of sets. <em>(Related Issues: <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/919\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/919\" data-id=\"203546017\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#919</a>, PRs: <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/924\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/924\" data-id=\"204162883\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#924</a>)</em></li>\n<li>Whenever passed something that is not an instance of a function, the instanceof assertion will now throw an error informing the user that he should pass a constructor to this assertion, but instead he has passed . <em>(Related Issues: <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/893\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/893\" data-id=\"197815875\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#893</a>, PRs: <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/924\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/924\" data-id=\"204162883\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#924</a>)</em></li>\n<li>Fix all issues on expect/should interfaces that were causing implementation frames to leak through. Also improve the internal Chai error test helper to validate stack traces. <em>(Issues: <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/878\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/878\" data-id=\"193012424\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#878</a>, <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/904\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/904\" data-id=\"201134525\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#904</a>, PRs: <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/922\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/922\" data-id=\"203905562\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#922</a>)</em></li>\n<li>This fixes custom messages not always being respected. <em>(Issues: <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/922\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/922\" data-id=\"203905562\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#922</a>, <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/947\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/947\" data-id=\"217019108\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#947</a>, <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/904\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/904\" data-id=\"201134525\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#904</a>, PRs: <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/916\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/916\" data-id=\"203275584\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#916</a>, <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/923\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/923\" data-id=\"203906386\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#923</a>)</em></li>\n<li>Fix PhantomJS 1.x incompatibility <em>(Issues: <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/966\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/966\" data-id=\"226900433\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#966</a>, PRs: <a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/890\" class=\"issue-link js-issue-link\" data-url=\"https://github.com/chaijs/chai/issues/890\" data-id=\"196544733\" data-error-text=\"Failed to load issue title\" data-permission-text=\"Issue title is private\">#890</a>)</em></li>\n</ul>\n</details>\n\n<details>\n<summary>Commits</summary>\n<p>The new version differs by 350 commits.</p>\n<ul>\n<li><a href=\"https://urls.greenkeeper.io/chaijs/chai/commit/ab1fbadcfe4339072976e468382b3d875fdafe5d\"><code>ab1fbad</code></a> <code>Merge pull request #973 from chaijs/chore-uncomment-travis-deploy</code></li>\n<li><a href=\"https://urls.greenkeeper.io/chaijs/chai/commit/545ca2f0a6fa976192ff5ce339124e8e967bd5f2\"><code>545ca2f</code></a> <code>chore: uncomment travis lines</code></li>\n<li><a href=\"https://urls.greenkeeper.io/chaijs/chai/commit/6349ff4731083c104407dd30eed0d10658dfaa46\"><code>6349ff4</code></a> <code>Merge pull request #972 from lucasfcosta/release-4.0.0</code></li>\n<li><a href=\"https://urls.greenkeeper.io/chaijs/chai/commit/0fe98b14fec71a727dea6d165c4b12bd817d65c1\"><code>0fe98b1</code></a> <code>chai@4.0.0</code></li>\n<li><a href=\"https://urls.greenkeeper.io/chaijs/chai/commit/30a44513f4f39fd8528b4527a32f674c1ea1b862\"><code>30a4451</code></a> <code>Merge pull request #967 from lucasfcosta/remove-lib-bump</code></li>\n<li><a href=\"https://urls.greenkeeper.io/chaijs/chai/commit/8ba95a76208a2f26c6f6bfb6dd908ad997613008\"><code>8ba95a7</code></a> <code>Remove bump command to change lib/chai.js</code></li>\n<li><a href=\"https://urls.greenkeeper.io/chaijs/chai/commit/0825826059637cfb22c71aa87db9324620cd0eab\"><code>0825826</code></a> <code>Merge pull request #964 from zetamorph/assert-nestedInclude-ownInclude</code></li>\n<li><a href=\"https://urls.greenkeeper.io/chaijs/chai/commit/f3adfd911ea4bd7c356b3efdc8ab047628dde10a\"><code>f3adfd9</code></a> <code>fix: PhantomJS 1.x incompatibility (#966)</code></li>\n<li><a href=\"https://urls.greenkeeper.io/chaijs/chai/commit/b744130df98f770df92737a1614ea95c10bd5df9\"><code>b744130</code></a> <code>Assert: made documentation more descriptive</code></li>\n<li><a href=\"https://urls.greenkeeper.io/chaijs/chai/commit/33e440367148a4a8c1a5b8c66b937890b3c611e4\"><code>33e4403</code></a> <code>test: added custom message test to negated .nested-, .deep-, .own.include</code></li>\n<li><a href=\"https://urls.greenkeeper.io/chaijs/chai/commit/4180242e8352f15cac91671be552cd865d5bb38f\"><code>4180242</code></a> <code>test: added message argument to negated nested-, deep-, own- and deepOwnInclude</code></li>\n<li><a href=\"https://urls.greenkeeper.io/chaijs/chai/commit/40bb4900601557099b7bb7f06a34a99881732b1c\"><code>40bb490</code></a> <code>assert interface: add .deepOwnInclude and notdeepOwnInclude</code></li>\n<li><a href=\"https://urls.greenkeeper.io/chaijs/chai/commit/97b62434314c5d2b2ee712fa8248045a94a975da\"><code>97b6243</code></a> <code>assert interface: add .ownInclude and .notOwnInclude</code></li>\n<li><a href=\"https://urls.greenkeeper.io/chaijs/chai/commit/24d7fa3849a172ffc8d09ea1fa068021409bc850\"><code>24d7fa3</code></a> <code>assert interface: add deepNestedInclude and notDeepNestedInclude</code></li>\n<li><a href=\"https://urls.greenkeeper.io/chaijs/chai/commit/7063b940a85fd55075d4b0db326e38a04e961d63\"><code>7063b94</code></a> <code>assert interface: add nestedInclude and notNestedInclude</code></li>\n</ul>\n<p>There are 250 commits in total.</p>\n<p>See the <a href=\"https://urls.greenkeeper.io/chaijs/chai/compare/4ca0218391cf947c6cfac2d1a7424a63a4b4c232...ab1fbadcfe4339072976e468382b3d875fdafe5d\">full diff</a></p>\n</details>\n\n<details>\n  <summary>Not sure how things should work exactly?</summary>\n\n  There is a collection of [frequently asked questions](https://greenkeeper.io/faq.html) and of course you may always [ask my humans](https://github.com/greenkeeperio/greenkeeper/issues/new).\n</details>\n\n\n---\n\n\nYour [Greenkeeper](https://greenkeeper.io) Bot :palm_tree:\n\n"},"comment":{"url":"https://api.github.com/repos/Workpop/typed-validation/issues/comments/306310042","html_url":"https://github.com/Workpop/typed-validation/pull/12#issuecomment-306310042","issue_url":"https://api.github.com/repos/Workpop/typed-validation/issues/12","id":306310042,"user":{"login":"greenkeeper[bot]","id":23040076,"avatar_url":"https://avatars1.githubusercontent.com/u/13812225?v=3","gravatar_id":"","url":"https://api.github.com/users/greenkeeper%5Bbot%5D","html_url":"https://github.com/apps/greenkeeper","followers_url":"https://api.github.com/users/greenkeeper%5Bbot%5D/followers","following_url":"https://api.github.com/users/greenkeeper%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/greenkeeper%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/greenkeeper%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/greenkeeper%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/greenkeeper%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/greenkeeper%5Bbot%5D/repos","events_url":"https://api.github.com/users/greenkeeper%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/greenkeeper%5Bbot%5D/received_events","type":"Bot","site_admin":false},"created_at":"2017-06-05T21:05:24Z","updated_at":"2017-06-05T21:05:24Z","body":"## Version **4.0.2** just got published. \n[Update to this version instead 🚀](https://github.com/Workpop/typed-validation/compare/greenkeeper%2Fchai-4.0.2?expand=1) \n\n<details>\n<summary>Release Notes</summary>\n<strong>4.0.2 / 2017-06-05</strong>\n\n<p>We have another bugfix release, addressing some issues for WebPack 1 users.</p>\n<h1>Bug Fixes</h1>\n<ul>\n<li>Revert getting version information from package.json, some bundler tools like Webpack do not come default with json loaders despite Node being able to handle this. This change moves back to hardcoding the version number in the codebase. (<a href=\"https://urls.greenkeeper.io/chaijs/chai/issues/985\">#985</a>, <a href=\"https://urls.greenkeeper.io/chaijs/chai/pull/986\">#986</a>)</li>\n</ul>\n</details>\n\n<details>\n<summary>Commits</summary>\n<p>The new version differs by 1 commits.</p>\n<ul>\n<li><a href=\"https://urls.greenkeeper.io/chaijs/chai/commit/616cf8bf883afa67f99a952901b4b44fcabc0cfe\"><code>616cf8b</code></a> <code>Revert get version package json (#986)</code></li>\n</ul>\n<p>See the <a href=\"https://urls.greenkeeper.io/chaijs/chai/compare/b38b8d765972d624f075cf173806b43164430dbc...616cf8bf883afa67f99a952901b4b44fcabc0cfe\">full diff</a></p>\n</details>"}}
{"actor":{"display_login":"greenkeeper"}}