From d42939595580c349d4623af54c63378c0b262153 Mon Sep 17 00:00:00 2001 From: Katie Byers Date: Mon, 18 Oct 2021 12:03:57 -0700 Subject: [PATCH 1/2] add instanceof checks to primitives missing them --- .../src/__tests__/asymmetricMatchers.test.ts | 18 ++++++++++++++++++ packages/expect/src/asymmetricMatchers.ts | 14 +++++++------- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/packages/expect/src/__tests__/asymmetricMatchers.test.ts b/packages/expect/src/__tests__/asymmetricMatchers.test.ts index ec48bc73a624..9c9e7b996509 100644 --- a/packages/expect/src/__tests__/asymmetricMatchers.test.ts +++ b/packages/expect/src/__tests__/asymmetricMatchers.test.ts @@ -40,6 +40,24 @@ test('Any.asymmetricMatch()', () => { }); }); +test('Any.asymmetricMatch() on primitive wrapper classes', () => { + [ + // eslint-disable-next-line no-new-wrappers + any(String).asymmetricMatch(new String('jest')), + // eslint-disable-next-line no-new-wrappers + any(Number).asymmetricMatch(new Number(1)), + // eslint-disable-next-line no-new-func + any(Function).asymmetricMatch(new Function('() => {}')), + // eslint-disable-next-line no-new-wrappers + any(Boolean).asymmetricMatch(new Boolean(true)), + /* global BigInt */ + any(BigInt).asymmetricMatch(Object(1n)), + any(Symbol).asymmetricMatch(Object(Symbol())), + ].forEach(test => { + jestExpect(test).toBe(true); + }); +}); + test('Any.toAsymmetricMatcher()', () => { jestExpect(any(Number).toAsymmetricMatcher()).toBe('Any'); }); diff --git a/packages/expect/src/asymmetricMatchers.ts b/packages/expect/src/asymmetricMatchers.ts index c8d2dae00625..b52c62951d61 100644 --- a/packages/expect/src/asymmetricMatchers.ts +++ b/packages/expect/src/asymmetricMatchers.ts @@ -69,21 +69,21 @@ class Any extends AsymmetricMatcher { return typeof other == 'function' || other instanceof Function; } - if (this.sample == Object) { - return typeof other == 'object'; - } - if (this.sample == Boolean) { - return typeof other == 'boolean'; + return typeof other == 'boolean' || other instanceof Boolean; } /* global BigInt */ if (this.sample == BigInt) { - return typeof other == 'bigint'; + return typeof other == 'bigint' || other instanceof BigInt; } if (this.sample == Symbol) { - return typeof other == 'symbol'; + return typeof other == 'symbol' || other instanceof Symbol; + } + + if (this.sample == Object) { + return typeof other == 'object'; } return other instanceof this.sample; From 239f2e45a3d02ecbeb1006708f85b8a2df8d6a1c Mon Sep 17 00:00:00 2001 From: Katie Byers Date: Mon, 18 Oct 2021 12:37:07 -0700 Subject: [PATCH 2/2] add changelog entry --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 08c99d3dc8fe..21167b6f6540 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,8 @@ ### Fixes +- `[expect]` Fix `.any()` checks on primitive wrapper classes ([11976](https://github.com/facebook/jest/pull/11976)) + ### 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))