From 317c41372e9461564a9e511c72f547f1e2fd7d7a Mon Sep 17 00:00:00 2001 From: Gareth Jones Date: Sat, 11 Apr 2020 20:30:10 +1200 Subject: [PATCH] fix(expect): accept functions in `toHaveLength` matcher (#9796) --- CHANGELOG.md | 2 ++ .../src/__tests__/__snapshots__/matchers.test.js.snap | 7 +++++++ packages/expect/src/__tests__/matchers.test.js | 1 + packages/expect/src/matchers.ts | 2 +- 4 files changed, 11 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0d46677941a5..fa2445e8f8b4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,8 @@ ### Fixes +- `[expect]` Restore support for passing functions to `toHaveLength` matcher ([#9796](https://github.com/facebook/jest/pull/9796)) + ### Chore & Maintenance ### Performance diff --git a/packages/expect/src/__tests__/__snapshots__/matchers.test.js.snap b/packages/expect/src/__tests__/__snapshots__/matchers.test.js.snap index bc1abc19adf6..e442e66efcaf 100644 --- a/packages/expect/src/__tests__/__snapshots__/matchers.test.js.snap +++ b/packages/expect/src/__tests__/__snapshots__/matchers.test.js.snap @@ -3046,6 +3046,13 @@ Expected length: not 2 Received array: [1, 2] `; +exports[`.toHaveLength {pass: true} expect([Function anonymous]).toHaveLength(0) 1`] = ` +expect(received).not.toHaveLength(expected) + +Expected length: not 0 +Received function: [Function anonymous] +`; + exports[`.toHaveLength error cases 1`] = ` expect(received).toHaveLength(expected) diff --git a/packages/expect/src/__tests__/matchers.test.js b/packages/expect/src/__tests__/matchers.test.js index 8d1ec4fbea8c..89f25a561ea8 100644 --- a/packages/expect/src/__tests__/matchers.test.js +++ b/packages/expect/src/__tests__/matchers.test.js @@ -1694,6 +1694,7 @@ describe('.toHaveLength', () => { [['a', 'b'], 2], ['abc', 3], ['', 0], + [() => {}, 0], ].forEach(([received, length]) => { test(`{pass: true} expect(${stringify( received, diff --git a/packages/expect/src/matchers.ts b/packages/expect/src/matchers.ts index 26c7725e2de1..cd7274425fb0 100644 --- a/packages/expect/src/matchers.ts +++ b/packages/expect/src/matchers.ts @@ -630,7 +630,7 @@ const matchers: MatchersObject = { if ( typeof received !== 'string' && - (typeof received !== 'object' || typeof received.length !== 'number') + (!received || typeof received.length !== 'number') ) { throw new Error( matcherErrorMessage(