From 1a864f23b48cc1d5d27782f4152f4f5d1abe2873 Mon Sep 17 00:00:00 2001 From: Bruno Farias Date: Sun, 25 Sep 2022 18:58:42 +0100 Subject: [PATCH] Fixes bug #13222 --- packages/jest-core/src/SearchSource.ts | 4 +-- .../src/__tests__/SearchSource.test.ts | 35 ++++++++++++++++--- packages/jest-core/src/types.ts | 7 +--- 3 files changed, 32 insertions(+), 14 deletions(-) diff --git a/packages/jest-core/src/SearchSource.ts b/packages/jest-core/src/SearchSource.ts index b1c8d31125fd..b7c14833e962 100644 --- a/packages/jest-core/src/SearchSource.ts +++ b/packages/jest-core/src/SearchSource.ts @@ -340,9 +340,7 @@ export default class SearchSource { ); } - const filteredSet = new Set( - filterResult.filtered.map(result => result.test), - ); + const filteredSet = new Set(filterResult.filtered); return { ...searchResult, diff --git a/packages/jest-core/src/__tests__/SearchSource.test.ts b/packages/jest-core/src/__tests__/SearchSource.test.ts index 7e4af257a870..d4a2a05d9e18 100644 --- a/packages/jest-core/src/__tests__/SearchSource.test.ts +++ b/packages/jest-core/src/__tests__/SearchSource.test.ts @@ -11,7 +11,8 @@ import type {Test} from '@jest/test-result'; import type {Config} from '@jest/types'; import {normalize} from 'jest-config'; import Runtime from 'jest-runtime'; -import SearchSource, {SearchResult} from '../SearchSource'; +import SearchSource from '../SearchSource'; +import type {Filter} from '../types'; jest.setTimeout(15000); @@ -103,11 +104,18 @@ describe('SearchSource', () => { }); describe('getTestPaths', () => { - const getTestPaths = async (initialOptions: Config.InitialOptions) => { + const getTestPaths = async ( + initialOptions: Config.InitialOptions, + filter?: Filter, + ) => { const searchSource = await initSearchSource(initialOptions); - const {tests: paths} = await searchSource.getTestPaths({ - testPathPattern: '', - }); + const {tests: paths} = await searchSource.getTestPaths( + { + testPathPattern: '', + }, + null, + filter, + ); return paths.map(({path: p}) => path.relative(rootDir, p)).sort(); }; @@ -288,6 +296,23 @@ describe('SearchSource', () => { path.normalize('__testtests__/test.jsx'), ]); }); + + it('filter tests based on an optional filter method', async () => { + const filterFunction = (testPaths: Array) => + Promise.resolve({ + filtered: testPaths.filter(testPath => testPath.includes('test.jsx')), + }); + const paths = await getTestPaths( + { + id, + rootDir, + }, + filterFunction, + ); + + expect(paths).toHaveLength(1); + expect(paths[0]).toStrictEqual(path.normalize('__testtests__/test.jsx')); + }); }); describe('filterPathsWin32', () => { diff --git a/packages/jest-core/src/types.ts b/packages/jest-core/src/types.ts index 98119f1c6375..84c761d53a1d 100644 --- a/packages/jest-core/src/types.ts +++ b/packages/jest-core/src/types.ts @@ -34,11 +34,6 @@ export type TestPathCasesWithPathPattern = TestPathCases & { testPathPattern: (path: string) => boolean; }; -export type FilterResult = { - test: string; - message: string; -}; - export type Filter = (testPaths: Array) => Promise<{ - filtered: Array; + filtered: Array; }>;