From 9add2745f827f9ee4d8cf8d366773eb83a65035f Mon Sep 17 00:00:00 2001 From: Bartosz Golebiowski Date: Thu, 1 Sep 2022 12:33:35 +0200 Subject: [PATCH] fix: add possibility to filter test files by fileName (#1915) * feat(vite-node): add possibility to filter test files by fileName * feat(vite-node): change filtering mechanism to use 'includes' method * refactor: use globTestFiles to filter by filename Co-authored-by: golebiowskib Co-authored-by: Vladimir Sheremet --- packages/vitest/src/node/core.ts | 8 ++++++++ packages/vitest/src/node/stdin.ts | 19 +++++++++++++++++++ packages/vitest/src/runtime/collect.ts | 1 - 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/packages/vitest/src/node/core.ts b/packages/vitest/src/node/core.ts index 595823d147d2..a53df6817a82 100644 --- a/packages/vitest/src/node/core.ts +++ b/packages/vitest/src/node/core.ts @@ -300,6 +300,14 @@ export class Vitest { await this.rerunFiles(files, trigger) } + async changeFilenamePattern(pattern: string) { + const files = this.state.getFilepaths() + if (!pattern) + return await this.rerunFiles(files, 'reset filename pattern') + const filteredFiles = await this.globTestFiles([pattern]) + await this.rerunFiles(filteredFiles, 'change filename pattern') + } + async rerunFailed() { await this.rerunFiles(this.state.getFailedFilepaths(), 'rerun failed') } diff --git a/packages/vitest/src/node/stdin.ts b/packages/vitest/src/node/stdin.ts index 60d550e4834d..a79bce614924 100644 --- a/packages/vitest/src/node/stdin.ts +++ b/packages/vitest/src/node/stdin.ts @@ -8,6 +8,7 @@ const keys = [ ['a', 'rerun all tests'], ['f', 'rerun only failed tests'], ['u', 'update snapshot'], + ['p', 'filter by a filename'], ['t', 'filter by a test name regex pattern'], ['q', 'quit'], ] @@ -22,6 +23,8 @@ ${keys.map(i => c.dim(' press ') + c.reset(c.bold(i[0])) + c.dim(` to ${i[1]}`) } export function registerConsoleShortcuts(ctx: Vitest) { + let latestFilename = '' + async function _keypressHandler(str: string, key: any) { // ctrl-c or esc if (str === '\x03' || str === '\x1B' || (key && key.ctrl && key.name === 'c')) @@ -48,6 +51,9 @@ export function registerConsoleShortcuts(ctx: Vitest) { // change testNamePattern if (name === 't') return inputNamePattern() + // change fileNamePattern + if (name === 'p') + return inputFilePattern() // quit if (name === 'q') return ctx.exit(true) @@ -69,6 +75,19 @@ export function registerConsoleShortcuts(ctx: Vitest) { on() } + async function inputFilePattern() { + off() + const { filter = '' }: { filter: string } = await prompt([{ + name: 'filter', + type: 'text', + message: 'Input filename pattern', + initial: latestFilename, + }]) + latestFilename = filter + await ctx.changeFilenamePattern(filter) + on() + } + let rl: readline.Interface | undefined function on() { off() diff --git a/packages/vitest/src/runtime/collect.ts b/packages/vitest/src/runtime/collect.ts index 290db7826fb7..5b48184b935a 100644 --- a/packages/vitest/src/runtime/collect.ts +++ b/packages/vitest/src/runtime/collect.ts @@ -22,7 +22,6 @@ function hash(str: string): string { export async function collectTests(paths: string[], config: ResolvedConfig) { const files: File[] = [] - const browserHashMap = getWorkerState().browserHashMap! async function importFromBrowser(filepath: string) {