- ed0c287: Add support for node:test
- A maintenance release. The code now uses biome instead of eslint + prettier. It also uses the newest version of TypeScript and features an updated tsconfig.json. End users shouldn't notice any changes.
- 46f000c: Add .clear to mocks which clears the calls array. Fixes .reset not clearing the calls.
- e5ce81a: Add mockObject.reset which resets all functions on MockObject
- ce60bac: Improve performance by making some error messages lazy
- 3a60d1f: Add toHaveSubset validator
- 2886d70: Fix esm exports
-
54b295f: Earl 1.0.0
This is the first stable release of Earl. It is an almost complete rewrite of the original Earl. The new version is much simpler, more powerful and easier to use.
Changes from the previous version
-
The package name has changed from
earljs
toearl
. The old package name will be deprecated on npm.- The new release includes both CommonJS and ESM builds.
-
Website updates
-
The website domain name has changed from
https://earljs.dev
tohttps://earl.fun
. -
The old domain will keep redirecting to the new one for a while.
-
The documentation has been updated to include new guides, more examples.
-
The documentation engine changed from Docusaurus to Vitepress.
-
-
Snapshot testing no longer relies on
jest-snapshot
.-
We developed a custom implementation which is much simpler and easier to maintain.
-
Snapshots are now saved alongside test files inside
.snapshot
files. -
The
toMatchSnapshot
validator now requires a test context to be passed to it. This is done by passingthis
in mocha andctx
in uvu. -
Test runner integration namely
earljs/mocha
andearljs/uvu
are no longer needed and have been removed.
-
-
Extending Earl with custom matchers and validators is now much easier. Instead of a special plugin system, custom matchers and validators are defined in the same way as the built in ones.
-
Adding validators is now done using
registerValidator
and declaring module overrides to make types work. -
Adding matchers is now done using
registerMatcher
and declaring module overrides to make types work. -
The ability to add custom equality rules was removed and there are no plans to bring it back in the future.
-
A special export
earljs/internal
is no longer needed and has been removed.
-
-
Validator API changes
-
The
expect()
function now only takes a single argument, which is the value to be tested. No custom options can be passed to it. -
toBeAContainerWith
has been replaced bytoInclude
. -
toBeAnArrayOfLength
has been replaced bytoHaveLength
. -
toBeAnArrayWith
has been replaced bytoInclude
. -
toBeAnObjectWith
has been removed. We are planning to add a newtoHaveSubset
validator in the near future. -
toBeDefined
was removed. It was unintuitive that it checked bothnull
andundefined
. Instead you should now callexpect(value).not.toBeNullish()
. -
toBeExhausted
has replaced bytoHaveBeenExhausted
. -
toBeGreaterThan
now works with numbers and bigints. -
toBeGreaterThanOrEqualTo
has been replaced bytoBeGreaterThanOrEqual
and now works with numbers and bigints. -
toBeLessThan
now works with numbers and bigints. -
toBeLessThanOrEqualTo
has been replaced bytoBeLessThanOrEqual
and now works with numbers and bigints. -
toBeRejected
doesn't take arguments anymore. Instead you should usetoBeRejectedWith
to check the error. -
toEqual
no longer has type checking problems with recursive types. -
toHaveBeenCalledExactlyWith
has been removed. It was a very ugly API. It has been replaced by a suite of new mock validators. -
toMatchSnapshot
now requires a test context to be passed to it. This is done by passingthis
in mocha andctx
in uvu. -
toReferentiallyEqual
has been replaced bytoExactlyEqual
. -
toThrow
now always fails if the function returns a promise.
-
-
Matcher API changes
-
All matchers now return
never
instead of trying to imitate the type of the value they are matching. This behavior is going to stay until TypeScript introduces a better way to do this. -
arrayOfLength
has been replaced bylength
. -
arrayWith
has been replaced byincludes
. -
containerWith
has been replaced byincludes
. -
defined
now checks for onlyundefined
. Previously it checked for bothnull
andundefined
. Instead you should now callnotNullish
. -
numberCloseTo
has been replaced bycloseTo
. The second parameter is now just the delta and not an object with thedelta
property. -
numberGreaterThan
has been replaced bygreaterThan
and now works with numbers and bigints. -
numberGreaterThanOrEqualTo
has been replaced bygreaterThanOrEqual
and now works with numbers and bigints. -
numberLessThan
has been replaced bylessThan
and now works with numbers and bigints. -
numberLessThanOrEqualTo
has been replaced bylessThanOrEqual
and now works with numbers and bigints. -
objectWith
has been replaced bysubset
. -
stringMatching
has been replaced byincludes
andregex
.
-
-
Mock API changes
-
Fix types for mocks. Previously, the types for
.executes
and.executesOnce
were incorrect. -
Rename
Mock
toMockFunction
. -
Rename
MockOf
toMockFunctionOf
. -
Calling configuration functions that change the default mock behavior no longer resets the mock. An explicit
reset
function has been added for that purpose.
-
New features
-
New validators
-
toBeAnInteger
. -
toBeASafeInteger
. -
toBeBetween
. -
toBeCloseTo
. -
toBeEmpty
. -
toEqualUnsorted
. -
toHaveBeenCalled
. -
toHaveBeenCalledTimes
. -
toHaveBeenLastCalledWith
. -
toHaveBeenNthCalledWith
. -
toHaveBeenOnlyCalledWith
. -
toMatchRegex
. -
toMatchSchema
. -
toSatisfy
.
-
-
New matchers
-
between
. -
closeTo
. -
empty
. -
integer
. -
notEmpty
. -
notNullish
. -
property
. -
regex
. -
safeInteger
. -
satisfies
. -
schema
. -
subset
.
-
-
New mock capabilities
- Added
mockObject
that can be used to mock objects.
- Added
-
-
1887ac2: Snapshot tests in
uvu
are now supported withearljs/uvu
.To use Earl with
uvu
, requireearljs/uvu
in your test command:# using the uvu cli $ uvu -r earljs/uvu tests # using node directly $ node -r earljs/uvu tests/example.test.js
- fde9d67: Fixed "a" matcher for functions
- 7378e50: Earl formatting no longer crashes on object with constructor set to undefined.
- 7dca1a2: Assertion errors throw with clean (without internal entries) stack traces
- 3973df6: Redo equality algorithm, improve error diffs
- 489321e: Add new validators and matchers:
toBeTruthy
,toBeFalsy
,toBeDefined
,toBeNullish
- 05013cd: Make
toBeAnArrayWith
andtoBeAContainerWith
handle repeated items as expected - 489321e: Allow to override
toEqual
types via plugins
- afbd34b: Ensure that package is published with the readme. Readme updates.
- d69576f: Fix types for mockFn's default implementation
- 00cae63: Function mocks can now be typed as Mock.Of
- a0f7b98: Improve support for comparing recursive objects
- 3651e17: Earl no longer crashes in mocha --watch mode
- d02b7d6: process.env.UPDATE_SNAPSHOTS set to "1" is now treated the same as when set to "true"
- f37f7fa: Improve types for
rejectsWithOnce
and ensure that no unhandled rejection error can be thrown. - f37f7fa: Make
objectWith
work with all kinds of objects, not only with plain objects. This is a breaking change.
-
c4c75c8:
Control.assert
type changed from never to void. -
ceb7d92: Added new validators:
toBeA
toBeAContainerWith
toBeAnArrayOfLength
toBeAnArrayWith
toBeAnObjectWith
Added new matchers:
expect.arrayOfLength
-
3335eca: Stop exporting
loadMatchers
from the main entry point. -
d99dcee: Add new number validators:
toBeGreaterThanOrEqualTo(number)
toBeLessThan(number)
toBeLessThanOrEqualTo(number)
toBeExhausted(number)
-
3335eca: Replace
Partial<PluginConfig>
instances with the equivalentPluginConfig
. -
c4c75c8: Added
Control.fail
. -
3335eca: Improve doc comments and function parameter names for the public library exports.
- 69c6af3: Add
toReferentiallyEqual
validator performing referential equality - 3f2ebc2: Improve
ErrorMatcher
description in error strings - 3f2ebc2: [Plugin devs] Make
control.assert
returnnever
notvoid
.
- 1ef1ad2: Adds the getControl function which is intended to be used by plugins.
- 125c29b: Tweak
toHaveBeenCalledExactlyWith
input type to properly support arrays - 923847b: Made
expect.a(Array)
return type beany[]
notunknown[]
which works well withtoEqual
.
- 1eac490: Add
toMatchSnapshot
validator
- 591dccc: Add readme to the final npm package
- 4964a16: Migrated to monorepo.
- 4964a16: Fix bug in
StringMatching
matcher that prevented it from matching strings with special characters - 1e3951d: Added new matchers:
arrayWith
,objectWith
ImprovecontainerWith
to work with multiple values - 4964a16: Added experimental plugin API.
- 0f490bd: Tweak
toBeRejected
validator signature to be properly async (returnPromise<void>
). This was a bug in typings not in behaviour.
- d2efbc6: Change compilation target to ES2015 to enable running on older node.js versions
- 42ed317: Added
containerWith
matcher, allowing to match a iterable containing given value