Update dependency chai to v5
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| chai (source) | 3.5.0 -> 5.2.0 |
Release Notes
chaijs/chai (chai)
v5.2.0
v5.1.2
What's Changed
- Fix secret name in publish action by @koddsson in https://github.com/chaijs/chai/pull/1614
- Publish npm packages with provenance by @koddsson in https://github.com/chaijs/chai/pull/1615
- build(deps-dev): bump braces from 3.0.2 to 3.0.3 by @dependabot in https://github.com/chaijs/chai/pull/1625
- chore: bump loupe and deep-eql by @43081j in https://github.com/chaijs/chai/pull/1635
- build(deps-dev): bump @75lb/deep-merge from 1.1.1 to 1.1.2 by @dependabot in https://github.com/chaijs/chai/pull/1636
- build(deps): bump rollup from 4.9.1 to 4.22.4 by @dependabot in https://github.com/chaijs/chai/pull/1637
- chore: update deep dependencies by @43081j in https://github.com/chaijs/chai/pull/1641
- chore: upgrade loupe by @43081j in https://github.com/chaijs/chai/pull/1646
- Support big int in approximently by @koddsson in https://github.com/chaijs/chai/pull/1606
Full Changelog: https://github.com/chaijs/chai/compare/v5.1.1...v5.1.2
v5.1.1
What's Changed
- Set up ESLint for JSDoc comments by @koddsson in https://github.com/chaijs/chai/pull/1605
- build(deps-dev): bump ip from 1.1.8 to 1.1.9 by @dependabot in https://github.com/chaijs/chai/pull/1608
- Correct Mocha import instructions by @MattiSG in https://github.com/chaijs/chai/pull/1611
- fix: support some virtual contexts in
toThrowby @43081j in https://github.com/chaijs/chai/pull/1609
New Contributors
- @MattiSG made their first contribution in https://github.com/chaijs/chai/pull/1611
Full Changelog: https://github.com/chaijs/chai/compare/v5.1.0...v5.1.1
v5.1.0
What's Changed
- Remove useless guards and add parentheses to constuctors by @koddsson in https://github.com/chaijs/chai/pull/1593
- Cleanup jsdoc comments by @koddsson in https://github.com/chaijs/chai/pull/1596
- Convert comments in "legal comments" format to jsdoc or normal comments by @koddsson in https://github.com/chaijs/chai/pull/1598
- Implement
iterableassertion by @koddsson in https://github.com/chaijs/chai/pull/1592 - Assert interface fix by @developer-bandi in https://github.com/chaijs/chai/pull/1601
- Set support in same members by @koddsson in https://github.com/chaijs/chai/pull/1583
- Fix publish script by @koddsson in https://github.com/chaijs/chai/pull/1602
New Contributors
- @developer-bandi made their first contribution in https://github.com/chaijs/chai/pull/1601
Full Changelog: https://github.com/chaijs/chai/compare/v5.0.3...v5.1.0
v5.0.3
Fix bad v5.0.2 publish.
Full Changelog: https://github.com/chaijs/chai/compare/v5.0.2...v5.0.3
v5.0.2
What's Changed
- build(deps): bump nanoid and mocha by @dependabot in https://github.com/chaijs/chai/pull/1558
- remove
bump-cliby @koddsson in https://github.com/chaijs/chai/pull/1559 - Update developer dependencies by @koddsson in https://github.com/chaijs/chai/pull/1560
- fix: removes
??for node compat (5.x) by @43081j in https://github.com/chaijs/chai/pull/1576 - Update
loupeto latest version by @koddsson in https://github.com/chaijs/chai/pull/1579 - Re-enable some webkit tests by @koddsson in https://github.com/chaijs/chai/pull/1580
- Remove a bunch of if statements in test/should.js by @koddsson in https://github.com/chaijs/chai/pull/1581
- Remove a bunch of unused files by @koddsson in https://github.com/chaijs/chai/pull/1582
- Fix 1564 by @koddsson in https://github.com/chaijs/chai/pull/1566
Full Changelog: https://github.com/chaijs/chai/compare/v5.0.1...v5.0.2
v5.0.0
BREAKING CHANGES
- Chai now only supports EcmaScript Modules (ESM). This means your tests will need to either have
import {...} from 'chai'orimport('chai').require('chai')will cause failures in nodejs. If you're using ESM and seeing failures, it may be due to a bundler or transpiler which is incorrectly converting import statements into require calls. - Dropped support for Internet Explorer.
- Dropped support for NodeJS < 18.
- Minimum supported browsers are now Firefox 100, Safari 14.1, Chrome 100, Edge 100. Support for browsers prior to these versions is "best effort" (bug reports on older browsers will be assessed individually and may be marked as wontfix).
What's Changed
- feat: use chaijs/loupe for inspection by @pcorpet in https://github.com/chaijs/chai/pull/1401
- docs: fix URL in README by @Izzur in https://github.com/chaijs/chai/pull/1413
- Remove
get-func-namedependency by @koddsson in https://github.com/chaijs/chai/pull/1416 - Convert Makefile script to npm scripts by @koddsson in https://github.com/chaijs/chai/pull/1424
- Clean up README badges by @koddsson in https://github.com/chaijs/chai/pull/1422
- fix: package.json - deprecation warning on exports field by @stevenjoezhang in https://github.com/chaijs/chai/pull/1400
- fix: deep-eql bump package to support symbols by @snewcomer in https://github.com/chaijs/chai/pull/1458
- ES module conversion PoC by @43081j in https://github.com/chaijs/chai/pull/1498
- chore: drop commonjs support by @43081j in https://github.com/chaijs/chai/pull/1503
- Update pathval by @koddsson in https://github.com/chaijs/chai/pull/1527
- Update check-error by @koddsson in https://github.com/chaijs/chai/pull/1528
- update
deep-eqlto latest version by @koddsson in https://github.com/chaijs/chai/pull/1542 - Inline
type-detectas a simple function by @koddsson in https://github.com/chaijs/chai/pull/1544 - Update loupe by @koddsson in https://github.com/chaijs/chai/pull/1545
- Typo 'Test an object' not 'Test and object' by @mavaddat in https://github.com/chaijs/chai/pull/1460
- Update
assertion-errorto it's latest major version! by @koddsson in https://github.com/chaijs/chai/pull/1543 - Replacing Karma with Web Test Runner by @koddsson in https://github.com/chaijs/chai/pull/1546
New Contributors
- @Izzur made their first contribution in https://github.com/chaijs/chai/pull/1413
- @stevenjoezhang made their first contribution in https://github.com/chaijs/chai/pull/1400
- @43081j made their first contribution in https://github.com/chaijs/chai/pull/1498
Full Changelog: https://github.com/chaijs/chai/compare/4.3.1...v5.0.0
v4.5.0
v4.4.1
What's Changed
- fix: removes
??for node compat by @43081j in https://github.com/chaijs/chai/pull/1574
Full Changelog: https://github.com/chaijs/chai/compare/v4.4.0...v4.4.1
v4.4.0
What's Changed
- Allow deepEqual fonction to be configured globally (4.x.x branch) by @forty in https://github.com/chaijs/chai/pull/1553
Full Changelog: https://github.com/chaijs/chai/compare/v4.3.10...v4.4.0
v4.3.10
This release simply bumps all dependencies to their latest non-breaking versions.
What's Changed
- upgrade all dependencies by @keithamus in https://github.com/chaijs/chai/pull/1540
Full Changelog: https://github.com/chaijs/chai/compare/v4.3.9...v4.3.10
v4.3.9
Upgrade dependencies.
This release upgrades dependencies to address CVE-2023-43646 where a large function name can cause "catastrophic backtracking" (aka ReDOS attack) which can cause the test suite to hang.
Full Changelog: https://github.com/chaijs/chai/compare/v4.3.8...v4.3.9
v4.3.8
What's Changed
- 4.x.x: Fix link to commit logs on GitHub by @bugwelle in https://github.com/chaijs/chai/pull/1487
- build(deps): bump socket.io-parser from 4.0.4 to 4.0.5 by @dependabot in https://github.com/chaijs/chai/pull/1488
- Small typo in test.js by @mavaddat in https://github.com/chaijs/chai/pull/1459
- docs: specify return type of objDisplay by @scarf005 in https://github.com/chaijs/chai/pull/1490
- Update CONTRIBUTING.md by @matheus-rodrigues00 in https://github.com/chaijs/chai/pull/1521
- Fix: update exports.version to current version by @peanutenthusiast in https://github.com/chaijs/chai/pull/1534
New Contributors
- @bugwelle made their first contribution in https://github.com/chaijs/chai/pull/1487
- @mavaddat made their first contribution in https://github.com/chaijs/chai/pull/1459
- @scarf005 made their first contribution in https://github.com/chaijs/chai/pull/1490
- @matheus-rodrigues00 made their first contribution in https://github.com/chaijs/chai/pull/1521
- @peanutenthusiast made their first contribution in https://github.com/chaijs/chai/pull/1534
Full Changelog: https://github.com/chaijs/chai/compare/v4.3.7...v4.3.8
v4.3.7
What's Changed
- fix: deep-eql bump package to support symbols comparison by @snewcomer in https://github.com/chaijs/chai/pull/1483
Full Changelog: https://github.com/chaijs/chai/compare/v4.3.6...v4.3.7
v4.3.6
Update loupe to 2.3.1
v4.3.5
- build chaijs
fca5bb1 - build(deps-dev): bump codecov from 3.1.0 to 3.7.1 (#1446)
747eb4e - fix package.json exports
022c2fa - fix: package.json - deprecation warning on exports field (#1400)
5276af6 - feat: use chaijs/loupe for inspection (#1401) (#1407)
c8a4e00
v4.3.4
This fixes broken inspect behavior with bigints (#1321) (#1383) thanks @vapier
v4.3.3: / 2021-03-03
This reintroduces Assertion as an export in the mjs file. See https://github.com/chaijs/chai/pull/1378 & https://github.com/chaijs/chai/issues/1375
v4.3.2: / 2021-03-03
This fixes a regression in IE11. See https://github.com/chaijs/chai/pull/1380 & https://github.com/chaijs/chai/issues/1379
v4.3.1: / 2021-03-02
This releases fixed an engine incompatibility with 4.3.0
The 4.x.x series of releases will be compatible with Node 4.0. Please report any errors found in Node 4 as bugs, and they will be fixed.
The 5.x.x series, when released, will drop support for Node 4.0
This fix also ensures pathval is updated to 1.1.1 to fix CVE-2020-7751
v4.3.0: / 2021-02-04
This is a minor release.
Not many changes have got in since the last release but this one contains a very important change (#1257) which will allow jest users to get better diffs. From this release onwards, jest users will be able to see which operator was used in their diffs. The operator is a property of the AssertionError thrown when assertions fail. This flag indicates what kind of comparison was made.
This is also an important change for plugin maintainers. Plugin maintainers will now have access to the operator flag, which they can have access to through an utilmethod calledgetOperator`.
Thanks to all the amazing people that contributed to this release.
New Features
- Allow
contain.oneOfto take an array of possible values (@voliva) - Adding operator attribute to assertion error (#1257) (@rpgeeganage)
- The
closeToerror message will now inform the user when adeltais required (@eouw0o83hf)
Docs
- Add contains flag to oneOf documentation (@voliva)
Tests
- Make sure that
useProxyconfig is checked inoverwriteProperty(@vieiralucas) - Add tests for
contain.oneOf(@voliva )
Chores
- Update mocha to version 6.1.4
- Add node v10 and v12 to ci (@vieiralucas)
- Drop support for node v4, v6 and v9 (@vieiralucas)
- Fix sauce config for headless chrome (@meeber)
- Update dev dependencies (@meeber)
- Removed phantomjs dependency (#1204)
v4.2.0: / 2018-09-25
This is a minor release. Thank you to all of our contributors and users!
New Features
- feat(assertions): add 'still' language chain (#1194; @ScottRudiger)
- .lengthOf for Maps and Sets (#1110, #1131; @asbish)
- feat: Add the assert.fail([message]) interface (#1116, #1117; @s-leroux)
Bug Fixes
- fix: remove Chai frames from
.deep.equalstack (#1124; @meeber) - add 'catch' keyword to proxyExcludedKeys (#1050, #1101; @generalandrew)
- property assertion should only accept strings if nested (#1043, #1044; @solodynamo)
- fix: Make tests pass with
--use_strict(#1034, #1040; @shvaikalesh)
Performance
- perf: Optimize proxify and stringDistance (#1098; @sophiebits)
- fix: Avoid repeated String#slice calls in stringDistance (#1095; @bmeurer)
Style
- Fix typos and remove trailing whitespaces (#1042; @simonewebdesign)
- Remove unnecessary code (#1049; @abetomo)
- Fix variable declaration (#1048; @abetomo)
Tests
- test(assert): increase coverage (#1084, #1085; @brutalcrozt)
- test: stop modifying globals in Proxy tests (#1144; @meeber)
Docs
- Fix unbalanced quotes in assert.notInclude example (#1200; @haykam821)
- docs: fix bad
.stringexample (#1156, #1157; @meeber) - fixed package npm url (#1151; @wadie)
- Spelling (#1145; @jsoref)
- docs: corrected spelling (#1141; @Powell-v2)
- docs: fix wrong
.propertychaining examples (https://github.com/chaijs/chai/issues/193#issuecomment-360334369, #1130; @meeber) - docs: improve throws examples (#1113; @ColinEberhardt)
- Fix typos (#1107; @tbroadley)
- docs: correct
.okdescription (#1047; @shvaikalesh)
Chores
- chore: update package-lock.json (#1198; @meeber)
- Update mocha to the latest version (#1127)
- chore: update dependencies (#1157; @meeber)
- Update browserify to the latest version (#1135)
- chore: update Node versions in Travis config (#1126; @meeber)
- chore: remove Opera from Sauce config (#1125; @meeber)
- chore: update dependencies (#1118; @meeber)
- chore: update dependencies (#1074; @meeber)
- Chore: change coverage service (coverall to codecov) (#927, #1073; @brutalcrozt)
- chore: add package-lock.json (#1013; @meeber)
v4.1.2: / 2017-08-31
This release fixes a bug when running in certain environments, and includes a few minor documentation fixes.
Bug Fixes
- fix: update
deep-eqlto version 3.0.0 (#1020) - fix: replace code causing breakage under strict CSP (#1032; @Alhadis)
Docs
- docs: add missing assert parameters (#1017, #1023; @Hpauric)
- docs: update year in license file (#1025; @yanca018)
v4.1.1: / 2017-08-05
This release includes a few bug and documentation fixes.
Bug Fixes
- fix:
.instanceofto allow DOM interfaces in IE11 (#1000, #1008; @meeber) - fix:
.includeto work with all objects (#1009, #1012; @meeber)
Docs
- fix: correct hasAnyKeys comment error (#1014; @zenHeart)
- docs: re-indent hasAnyKeys code (#1016; @keithamus)
v4.1.0: / 2017-07-11
This release includes one new feature and a few bug fixes.
New Features
- Add ES6 collection support to include() (#970, #994; @shvaikalesh)
Bug Fixes
- Allow dates for isBelow and isAbove assertions (#980, #990; @v1adko)
- fix: check target's type in
.propertyassertion (#992; @meeber)
Chores
- Add a missing var keyword found by lgtm.com (#988; @samlanning)
- refactor:
expectTypesto accessssfiflag (#993; @meeber) - Create CODEOWNERS (#1004; @keithamus)
v4.0.2: / 2017-06-05
We have another bugfix release, addressing some issues for WebPack 1 users.
Bug Fixes
- 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. (#985, #986)
v4.0.1: / 2017-05-31
4.0.1
Of course, any major release cannot go without a quick bugfix release shortly after - and here's ours!
Bug Fixes
- Remove package.json
browserfield which was mistakenly added, and caused bundler tools like Browserify or Webpack to fail as it attempted to rebundle an already bundled file. (#978, #982)
v4.0.0: / 2017-05-26
4.0.0
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:
-
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.
-
deep equality has been rewritten from the ground up to support ES6 types like
MapandSet, 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. -
we have made sure the
deepflag now only ever does deep equality. Beforehand, it would sometimes also be used to test nested properties (for exampleexpect(foo).to.have.deep.property('bar.baz'). For nested assertions, please now use the.nestedflag. -
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
TypeErrormessages. -
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!
Breaking Changes
-
We no longer support Node v0.10 and v0.12 (since their LTS has ended) (PRs: #816, #901)
-
Instead of allowing the user to write the path of a property, now the deep flag performs a deep equality comparison when used with the
.propertyassertion. If you want the old behavior of using the dot or bracket notation to denote the property you want to assert against you can use the new.nestedflag. (Related Issues: #745, #743, PRs: #758, #757)const obj = {a: 1}; // The `.deep` flag now does deep equality comparisons expect({foo: obj}).to.have.deep.property('foo', {a: 1}); // Use the `nested` flag if you want to assert against a nested property using the bracket or dot notation expect({foo: obj}).to.have.nested.property('foo.a', 1); // You can also use both flags combined const obj2 = {a: {b: 2}}; expect({foo: obj2}).to.have.deep.nested.property('foo.a', {b: 2});Please notice that the old methods which used the old behavior of the
deepflag on theassertinterface have been renamed. They all have had thedeepword changed by thenestedword. If you want to know more about this please take a look at #757. -
Previously,
expect(obj).not.property(name, val)would throw an Error ifobjdidn't have a property namedname. This change causes the assertion to pass instead. Theassert.propertyNotValandassert.deepPropertyNotValassertions were renamed toassert.notPropertyValandassert.notDeepPropertyVal, respectively. (Related Issues: #16, #743, #758) -
You can now use the
deepflag for the.includeassertion in order to perform adeepequality check to see if something is included on thetarget. Previously,.includewas using strict equality (===) for non-negated property inclusion, butdeepequality for negated property inclusion and array inclusion. This change causes the .include assertion to always use strict equality unless the deep flag is set. Please take a look at this comment if you want to know more about it. (Related Issues: #743, PRs: #760, #761)const obj = {a: 1}; expect([obj]).to.deep.include({a:1}); expect({foo: obj}).to.deep.include({foo: {a:1}}); -
Fix unstable behavior of the
NaNassertion. Now we use the suggested ES6 implementation. The new implementation is now more correct, strict and simple. While the old one threw false positives, the new implementation only checks if something isNaN(or not if the.notflag is used) and nothing else. (Related Issues: #498, #682, #681, PRs: #508)// Only `NaN` will be considered to be `NaN` and nothing else expect(NaN).to.be.NaN; // Anything that is not `NaN` cannot be considered as `NaN` expect('randomString').not.to.be.NaN; expect(true).not.to.be.NaN; expect({}).not.to.be.NaN; expect(4).not.to.be.NaN; -
The Typed Array types are now truncated if they're too long (in this case, if they exceed the
truncateThresholdvalue on theconfig). (Related Issues: #441, PRs: #576)var arr = []; for (var i = 1; i <= 1000; i++) { arr.push(i); } // The assertion below will truncate the diff shown and the enormous typed array will be shown as: // [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ... ] instead of printing the whole typed array chai.expect(new Float32Array(100)).to.equal(1); -
The assertions:
within,above,least,below,most,increase,decreasewill throw an error if the assertion's target or arguments are not numbers. (Related Issues: #691, PRs: #692, #796)// These will throw errors, for example: expect(null).to.be.within(0, 1); expect(null).to.be.above(10); expect(null).to.be.at.least(20); expect(null).to.be.below(20); expect(null).to.be.at.most(20); expect(null).to.increase.by(20); expect(null).to.decrease.by(20); // This will not: expect('string').to.have.a.lengthOf.at.least(3); -
Previously,
expect(obj).not.ownProperty(name, val)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: #795, #, PRs: #744, #810)*expect({ foo: 'baz' }).to.not.have.own.property('quux', 'baz'); -
The
.emptyassertion will now throw when it is passed non-string primitives and functions (PRs: #763, #812)// These will throw TypeErrors: expect(Symbol()).to.be.empty; expect(function() {}).to.be.empty; expect(true).to.be.empty; expect(1).to.be.empty -
Assertion subject (
obj) changes when usingownPropertyorown.propertyand thus enables chaining. (Related Issues: #281, PRs: #641)expect({val: 20}).to.have.own.property('val').above(10); -
The
.change,.increase, and.decreaseassertions 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. (Related Issues: #917, PRs: #925)
// This will not work anymore because there is no benefit to chaining these assertions:
expect(function() {}).to.change.by(2)
expect(function() {}).to.increase.by(2)
expect(function() {}).to.decrease.by(2)
-
The
utils(second argument passed to thechai.usecallback function) no longer exports thegetPathValuefunction. If you want to use that please use thepathvalmodule, which is what chai uses internally now. (Related Issues: #457, #737, PRs: #830) -
(For plugin authors) Throw when calling
_superonoverwriteMethodif the method being overwritten isundefined. Currently if the method you are trying to overwrite is not defined and your new method calls_superit will throw anError.(Related Issues: #467, PRs: #528) Before this change, calling_superwould simply returnthis.// Considering the method `imaginaryMethod` does not exist, this would throw an error for example: chai.use(function (chai, utilities) { chai.Assertion.overwriteMethod('imaginaryMethod', function (_super) { return function () { _super.apply(this, arguments); } }); }); // 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 expect('anything').to.imaginaryMethod(); -
(For plugin authors) Now
showDiffis turned on by default whenever theshowDiffflag is anything other thanfalse. This issue will mostly affect plugin creators or anyone that made extensions to the core, since this affects theAssertion.assertmethod. (Related Issues: #574, PRs: #515)// Now whenever you call `Assertion.assert` with anything that is not false for the `showDiff` flag it will be true // The assertion error that was thrown will have the `showDiff` flag turned on since it was not passed to the `assert` method try { new chai.Assertion().assert( 'one' === 'two' , 'expected #{this} to equal #{exp}' , 'expected #{this} to not equal #{act}' , 'one' , 'two' ); } catch(e) { assert.isTrue(e.showDiff); } // The assertion error that was thrown will have the `showDiff` flag turned off since here we passed `false` explicitly try { new chai.Assertion().assert( 'one' === 'two' , 'expected #{this} to equal #{exp}' , 'expected #{this} to not equal #{act}' , 'one' , 'two' , false ); } catch(e) { assert.isFalse(e.showDiff); }
New Features
-
Throw when non-existent property is read. (Related Issues: #407, #766 PRs: #721, #770) This is a potentially breaking change. Your build will fail if you have typos in your property assertions Before
4.x.xwhen using property assertions they would not throw an error if you wrote it incorrectly. The example below, for example, would pass:expect(true).to.be.ture; // Oops, typo, now Chai will throw an ErrorSince this implementation depends on ES6
Proxiesit will only work on platforms that support it.This property can be enabled (default) or disabled through the
config.useProxyproperty, for example:chai.config.useProxy = false; // disable use of Proxy -
Add fix suggestions when accessing a nonexistent property in proxy mode. (Related Issues: #771, PRs: #782) When a nonexistent property is accessed in proxy mode, Chai will compute the levenshtein distance to all possible properties in order to suggest the best fix to the user.
expect(false).to.be.fals; // Error: Invalid Chai property: fals. Did you mean "false"? expect('foo').to.be.undefind; // Error: Invalid Chai property: undefind. Did you mean "undefined"? // If the Levenshtein distance between the word and any Chai property is greater than 4, no fix will be suggested expect('foo').to.be.fdsakfdsafsagsadgagsdfasf // error thrown, no fix suggested -
When non-chainable methods (including overwritten non-chainable methods) are used incorrectly an error will be thrown with a helpful error message. (PRs: #789)
expect(true).to.equal.true; // Invalid Chai property: equal.true. See docs for proper usage of "equal". -
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. Since this implementation depends on ES6
Proxiesit will only work on platforms that support it. Also, if you disableconfig.useProxy, this setting will have no effect. (Related Issues: #765, PRs: #774)chai.config.proxyExcludedKeys.push('nonExistingProp'); expect('my string').to.nonExistingProp; // This won't throw an error now -
Add script that registers should as a side-effect. (Related Issues: #594, #693 PRs: #604)
// You can now write: import 'chai/should'; // as opposed to: import {should} from 'chai'; should();You can also register should via a
mochaoption:mocha --require chai/should. -
The
changeassertion accepts a function as object. (Related Issues: #544, PRs: #607)// Now you can also check if the return value of a function changes, for example assert.increases( someOperation, () => getSomething().length ) -
You can also assert for a delta using the
byassertion alongside thechange,increaseanddecreaseassertions. (Related Issues: #339, PRs: #621)
// You can use `.by` to assert the amount you want something to change
var obj = { val: 10 };
var increaseByTwo = function() { obj.val += 2 };
var decreaseByTwo = function() { obj.val -= 2 };
var increaseByThree = function() { obj.val += 3 };
expect(increaseByThree).to.change(obj, 'val').by(3);
expect(increaseByTwo).to.increase(obj, 'val').by(2);
expect(decreaseByTwo).to.decrease(obj, 'val').by(2);
// 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
// Take a look at the examples below:
expect(increaseByThree).to.change(obj, 'val').but.not.by(5)
expect(increaseByTwo).to.increase(obj, 'val').but.not.by(1)
expect(decreaseByTwo).to.decrease(obj, 'val').but.not.by(1)
// The `.keys` assertion now works on `map`s and `set`s natively, like the examples below:
expect(new Map([[{objKey: 'value'}, 'value'], [1, 2]])).to.contain.key({objKey: 'value'});
expect(new Map([[{objKey: 'value'}, 'value'], [1, 2]])).to.contain.any.keys([{objKey: 'value'}, {anotherKey: 'anotherValue'}]);
expect(new Map([['firstKey', 'firstValue'], [1, 2]])).to.contain.all.keys('firstKey', 1);
expect(new Set([['foo', 'bar'], ['example', 1]])).to.have.any.keys('foo');
// You can also use `.deep` when asserting agains `Map`s and `Set`s
expect(new Map([[{objKey: 'value'}, 'value'], [1, 2]])).to.contain.any.deep.keys([{objKey: 'value'}, {anotherKey: 'anotherValue'}]);
expect(new Map([['firstKey', 'firstValue'], [1, 2]])).to.contain.all.deep.keys('firstKey', 1);
expect(new Set([['foo', 'bar'], ['example', 1]])).to.have.any.deep.keys('foo');
-
Add compatibility with strict mode. (Related Issues: #578, PRs: #665)
// This means you can now run your code with the `--use_strict` flag on Node // If want to understand more about this please read the issue related to this change -
Add
doesandbutas new no-op assertion. (Related Issues: #700, #339 PRs: #621, #701)// You can now write assertions forming phrases with these two new words: expect(increaseByThree).to.change(obj, 'val').but.not.by(5); expect(foobar).to.have.property("baz").which.does.not.have.property("thing"); -
Allow
useto be imported using new ES6 module syntax. (Related Issues: #718, PRs: #724)// You can now import `use` using the ES6 module syntax, like the example below: import sinonChai from "sinon-chai"; import {expect, use} from "chai"; use(sinonChai);You can also use
requirealongside the new ES6 destructuring feature:const sinonChai = require('sinon-chai'); const {expect, use} = require("chai"); use(sinonChai); -
Add ordered flag for members assertion. (Related Issues: #717, PRs: #728)
// You can now use the `ordered` flag to assert the order of elements when using the `members` assertion: expect([1, 2, 3]).to.include.ordered.members([1, 2]); // This passes expect([1, 2, 3]).to.include.ordered.members([2, 3]); // This will fail! Read the docs to know more. -
Add
.ownflag to.propertyassertion. It does the same thing as.ownPropertyand cannot be used alongisde the new.nestedflag. (Related Issues: #795, PRs: #810)expect({a: 1}).to.have.own.property('a'); // The example below will thrown an Error expect({a: {b: 1}}).to.have.own.nested.property('a.b', 1); -
Add
.deepsupport to.propertyassertion. (Related Issues: #795, PRs: #810)expect({ foo: { bar: 'baz' } }).to.have.deep.own.property('foo', { bar: 'baz' }); expect({ foo: { bar: { baz: 'quux' } } }).to.have.deep.nested.property('foo.bar', { baz: 'quux' }); -
The
.emptyassertion will now work with ES6 collections (PRs: #763, #812, #814) Please notice that this assertion will throw an error when it is passed aWeakMaporWeakSet.expect(new Set()).to.be.empty; expect(new Map()).to.be.empty; // The examples below will throw a TypeError: expect(new WeakSet()).to.be.empty; expect(new WeakMap()).to.be.empty; -
Add script that registers
shouldas a side-effect. This change allows you to registershouldvia a mocha option by using:mocha spec.js -r chai/register-shouldand also allows you to register the testing style globally. (Issues: #693, PRs: #868)require('chai/register-should'); // Using Should style -
Add script that registers
assertas a side-effect. This change allows you to registerassertvia a mocha option by using:mocha spec.js -r chai/register-assert(Issues: #693, PRs: #868, #872)
require('chai/register-assert'); // Using Assert style
-
Add script that registers
expectas a side-effect. This change allows you to registerexpectvia a mocha option by using:mocha spec.js -r chai/register-expect(Issues: #693, PRs: #868, #872)require('chai/register-expect'); // Using Expect style -
When the
lengthassertion is chained directly off of an uninvoked method, it referencesfunction's built-inlengthproperty instead of Chai'slengthassertion. 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. (Issues: #684, #841, PRs: #897) -
Allows the
lockSsfiflag to be set when creating new Assertion. This flag controls whether or not the givenssfiflag should retain its current value, even as assertions are chained off of this object. This is usually set totruewhen creating a new assertion from within another assertion. It's also temporarily set totruebefore an overwritten assertion gets called by the overwriting assertion. *(Issues: #878, #904, PRs: [#922](htt
Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
- [ ] If you want to rebase/retry this PR, check this box
This PR was generated by Mend Renovate. View the repository job log.