From 0c1d5f9ffffdb50758d087ded95d3a711243f518 Mon Sep 17 00:00:00 2001 From: ehmicky Date: Thu, 14 Feb 2019 15:01:02 +0100 Subject: [PATCH] fix: validating async functions (#7894) (#7896) ## Summary `jest-validate` distinguishes between sync and async functions, but it should not. Fixes #7894. ## Test plan ```js const { validate } = require('jest-validate') assert(validate({ name: async () => {} }, { exampleConfig: { name: () => {} } }).isValid) assert(validate({ name: () => {} }, { exampleConfig: { name: async () => {} } }).isValid) assert(validate({ name: async () => {} }, { exampleConfig: { name: async () => {} } }).isValid) assert(validate({ name: () => {} }, { exampleConfig: { name: () => {} } }).isValid) ``` --- CHANGELOG.md | 1 + .../jest-validate/src/__tests__/validate.test.js | 14 ++++++++++++++ packages/jest-validate/src/condition.js | 1 + 3 files changed, 16 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a82d5ef3f82d..909f7ed9490e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ - `[jest-cli]` Refactor `-o` and `--coverage` combined ([#7611](https://github.com/facebook/jest/pull/7611)) - `[expect]` Fix custom async matcher stack trace ([#7652](https://github.com/facebook/jest/pull/7652)) - `[jest-changed-files]` Improve default file selection for Mercurial repos ([#7880](https://github.com/facebook/jest/pull/7880)) +- `[jest-validate]` Fix validating async functions ([#7894](https://github.com/facebook/jest/issues/7894)) ### Chore & Maintenance diff --git a/packages/jest-validate/src/__tests__/validate.test.js b/packages/jest-validate/src/__tests__/validate.test.js index f9160817e346..936ab1ae9b7f 100644 --- a/packages/jest-validate/src/__tests__/validate.test.js +++ b/packages/jest-validate/src/__tests__/validate.test.js @@ -89,6 +89,20 @@ test('recursively omits null and undefined config values', () => { }); }); +test.each([ + [function() {}, function() {}], + [async function() {}, function() {}], + [function() {}, async function() {}], + [async function() {}, async function() {}], +])( + 'treat async and non-async functions as equivalent', + (value, exampleValue) => { + expect( + validate({name: value}, {exampleConfig: {name: exampleValue}}), + ).toEqual({hasDeprecationWarnings: false, isValid: true}); + }, +); + test('respects blacklist', () => { const warn = console.warn; console.warn = jest.fn(); diff --git a/packages/jest-validate/src/condition.js b/packages/jest-validate/src/condition.js index 100129124709..39fd9107c07c 100644 --- a/packages/jest-validate/src/condition.js +++ b/packages/jest-validate/src/condition.js @@ -15,6 +15,7 @@ function validationConditionSingle(option: any, validOption: any): boolean { return ( option === null || option === undefined || + (typeof option === 'function' && typeof validOption === 'function') || toString.call(option) === toString.call(validOption) ); }