From 5439fd634d90293e6f27d8b1effa5e1bf71b1efe Mon Sep 17 00:00:00 2001 From: Bence Laky Date: Mon, 18 Oct 2021 22:12:29 +0200 Subject: [PATCH 1/4] fix: not to break on expect extension override --- CHANGELOG.md | 2 ++ packages/expect/src/__tests__/extend.test.ts | 18 ++++++++++++++++++ packages/expect/src/jestMatchersObject.ts | 2 ++ 3 files changed, 22 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 08c99d3dc8fe..197b74761f75 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,8 @@ ### Fixes +- `[expect]` Make expect extension properties `configurable` + ### Chore & Maintenance - `[jest-config, jest-util]` Use `ci-info` instead of `is-ci` to detect CI environment ([11973](https://github.com/facebook/jest/pull/11973)) diff --git a/packages/expect/src/__tests__/extend.test.ts b/packages/expect/src/__tests__/extend.test.ts index 8fdfd1d856c1..1ddd913ed07a 100644 --- a/packages/expect/src/__tests__/extend.test.ts +++ b/packages/expect/src/__tests__/extend.test.ts @@ -167,3 +167,21 @@ it('prints the Symbol into the error message', () => { }), ).toThrowErrorMatchingSnapshot(); }); + +it('allows overriding existing extension', () => { + jestExpect.extend({ + toAllowOverridingExistingMatcher(_expected: unknown) { + return {pass: _expected === 'bar'}; + }, + }); + + jestExpect('foo').not.toAllowOverridingExistingMatcher(); + + jestExpect.extend({ + toAllowOverridingExistingMatcher(_expected: unknown) { + return {pass: _expected === 'foo'}; + }, + }); + + jestExpect('foo').toAllowOverridingExistingMatcher(); +}); diff --git a/packages/expect/src/jestMatchersObject.ts b/packages/expect/src/jestMatchersObject.ts index 3b15af89015e..f63e438ae625 100644 --- a/packages/expect/src/jestMatchersObject.ts +++ b/packages/expect/src/jestMatchersObject.ts @@ -99,10 +99,12 @@ export const setMatchers = ( } Object.defineProperty(expect, key, { + configurable: true, value: (...sample: [unknown, ...Array]) => new CustomMatcher(false, ...sample), }); Object.defineProperty(expect.not, key, { + configurable: true, value: (...sample: [unknown, ...Array]) => new CustomMatcher(true, ...sample), }); From df2c4321ee6c15413cf4c3e622b5942af627c8ca Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Tue, 19 Oct 2021 07:39:02 +0200 Subject: [PATCH 2/4] Update jestMatchersObject.ts --- packages/expect/src/jestMatchersObject.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/expect/src/jestMatchersObject.ts b/packages/expect/src/jestMatchersObject.ts index f63e438ae625..cbfe6344a6db 100644 --- a/packages/expect/src/jestMatchersObject.ts +++ b/packages/expect/src/jestMatchersObject.ts @@ -100,13 +100,17 @@ export const setMatchers = ( Object.defineProperty(expect, key, { configurable: true, + enumerable: true, value: (...sample: [unknown, ...Array]) => new CustomMatcher(false, ...sample), + writable: true, }); Object.defineProperty(expect.not, key, { configurable: true, + enumerable: true, value: (...sample: [unknown, ...Array]) => new CustomMatcher(true, ...sample), + writable: true, }); } }); From 414f8be7838779180f96007ad35b9f11ed5419f4 Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Tue, 19 Oct 2021 07:40:03 +0200 Subject: [PATCH 3/4] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 197b74761f75..5ce7af89a60f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ ### Fixes -- `[expect]` Make expect extension properties `configurable` +- `[expect]` Make expect extension properties `configurable` ([11978](https://github.com/facebook/jest/pull/11978)) ### Chore & Maintenance From 362c2707339ae863bf644b46e830bc4b4287f03f Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Tue, 19 Oct 2021 07:40:45 +0200 Subject: [PATCH 4/4] Update CHANGELOG.md --- CHANGELOG.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5ce7af89a60f..a736ef807758 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,11 +4,11 @@ ### Fixes -- `[expect]` Make expect extension properties `configurable` ([11978](https://github.com/facebook/jest/pull/11978)) +- `[expect]` Make expect extension properties `configurable` ([#11978](https://github.com/facebook/jest/pull/11978)) ### Chore & Maintenance -- `[jest-config, jest-util]` Use `ci-info` instead of `is-ci` to detect CI environment ([11973](https://github.com/facebook/jest/pull/11973)) +- `[jest-config, jest-util]` Use `ci-info` instead of `is-ci` to detect CI environment ([#11973](https://github.com/facebook/jest/pull/11973)) ### Performance @@ -16,7 +16,7 @@ ### Features -- `[jest-config]` Add `testEnvironmentOptions.html` to apply to jsdom input ([11950](https://github.com/facebook/jest/pull/11950)) +- `[jest-config]` Add `testEnvironmentOptions.html` to apply to jsdom input ([#11950](https://github.com/facebook/jest/pull/11950)) - `[jest-resolver]` Support default export (`.`) in `exports` field _if_ `main` is missing ([#11919](https://github.com/facebook/jest/pull/11919)) ### Fixes