Skip to content

Commit

Permalink
Add missing root property to vitest (#677)
Browse files Browse the repository at this point in the history
  • Loading branch information
nebez committed Jun 15, 2024
1 parent 7c9b645 commit 6797bf8
Show file tree
Hide file tree
Showing 11 changed files with 70 additions and 7 deletions.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Empty file.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions packages/knip/fixtures/plugins/vitest4/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"name": "@fixtures/vitest4",
"devDependencies": {
"vitest": "*"
}
}
5 changes: 5 additions & 0 deletions packages/knip/fixtures/plugins/vitest4/src/unused.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import { expect, test } from 'vitest';

test('Unit A', () => {
expect(true).toBe(!false);
});
5 changes: 5 additions & 0 deletions packages/knip/fixtures/plugins/vitest4/tests/adder.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import { expect, test } from 'vitest';

test('Unit A', () => {
expect(true).toBe(!false);
});
1 change: 1 addition & 0 deletions packages/knip/fixtures/plugins/vitest4/tests/setup.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export default {};
9 changes: 9 additions & 0 deletions packages/knip/fixtures/plugins/vitest4/vitest.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { defineConfig } from 'vitest/config';

export default defineConfig({
test: {
root: 'tests',
include: ['*.test.ts'],
setupFiles: ['./setup.ts'],
},
});
17 changes: 10 additions & 7 deletions packages/knip/src/plugins/vitest/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,11 @@ const config = ['vitest*.config.{js,mjs,ts,cjs,mts,cts}', 'vitest.{workspace,pro

const entry = ['**/*.{bench,test,test-d,spec}.?(c|m)[jt]s?(x)'];

const resolveEntry = (options: PluginOptions, specifier: string) => {
const resolveEntry = (options: PluginOptions, rootDir: string, specifier: string) => {
const { configFileDir, configFileName } = options;
const resolvedPath = isAbsolute(specifier)
? specifier
: tryResolve(join(configFileDir, specifier), join(configFileDir, configFileName));
: tryResolve(join(configFileDir, rootDir, specifier), join(configFileDir, rootDir, configFileName));
if (resolvedPath) return toEntryPattern(relative(configFileDir, resolvedPath));
return specifier;
};
Expand Down Expand Up @@ -50,8 +50,9 @@ const findConfigDependencies = (localConfig: ViteConfig, options: PluginOptions)
(testConfig.coverage && testConfig.coverage.enabled !== false) || hasScriptWithCoverage(manifest.scripts);
const coverage = hasCoverageEnabled ? [`@vitest/coverage-${testConfig.coverage?.provider ?? 'v8'}`] : [];

const setupFiles = [testConfig.setupFiles ?? []].flat().map(v => resolveEntry(options, v));
const globalSetup = [testConfig.globalSetup ?? []].flat().map(v => resolveEntry(options, v));
const rootDir = testConfig.root ?? '.';
const setupFiles = [testConfig.setupFiles ?? []].flat().map(v => resolveEntry(options, rootDir, v));
const globalSetup = [testConfig.globalSetup ?? []].flat().map(v => resolveEntry(options, rootDir, v));
return [...environments, ...reporters, ...coverage, ...setupFiles, ...globalSetup];
};

Expand Down Expand Up @@ -81,10 +82,11 @@ export const resolveEntryPaths: ResolveEntryPaths<ViteConfigOrFn | VitestWorkspa
const dependencies = new Set<string>();
const configs = await getConfigs(localConfig);
for (const cfg of configs) {
const rootDir = cfg.test?.root ?? '.';
if (cfg.test?.include) {
for (const dependency of cfg.test.include) dependencies.add(dependency);
for (const dependency of cfg.test.include) dependencies.add(join(rootDir, dependency));
} else {
for (const dependency of options.config.entry ?? entry) dependencies.add(dependency);
for (const dependency of options.config.entry ?? entry) dependencies.add(join(rootDir, dependency));
}
}

Expand All @@ -97,8 +99,9 @@ export const resolveConfig: ResolveConfig<ViteConfigOrFn | VitestWorkspaceConfig
for (const cfg of configs) {
for (const dependency of findConfigDependencies(cfg, options)) dependencies.add(dependency);
const entry = cfg.build?.lib?.entry ?? [];
const rootDir = cfg.test?.root ?? '.';
const deps = (typeof entry === 'string' ? [entry] : Object.values(entry)).map(specifier =>
resolveEntry(options, specifier)
resolveEntry(options, rootDir, specifier)
);
for (const dependency of deps) dependencies.add(dependency);
}
Expand Down
1 change: 1 addition & 0 deletions packages/knip/src/plugins/vitest/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ interface VitestConfig {
enabled?: boolean;
provider: string;
};
root?: string;
environment?: string;
globalSetup?: string | string[];
reporters?: (string | unknown)[];
Expand Down
24 changes: 24 additions & 0 deletions packages/knip/test/plugins/vitest4.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import { test } from 'bun:test';
import assert from 'node:assert/strict';
import { main } from '../../src/index.js';
import { join, resolve } from '../../src/util/path.js';
import baseArguments from '../helpers/baseArguments.js';
import baseCounters from '../helpers/baseCounters.js';

const cwd = resolve('fixtures/plugins/vitest4');

test('Find dependencies with Vitest plugin (4)', async () => {
const { issues, counters } = await main({
...baseArguments,
cwd,
});

assert(issues.files.has(join(cwd, 'src/unused.test.ts')));

assert.deepEqual(counters, {
...baseCounters,
files: 1,
processed: 4,
total: 4,
});
});

0 comments on commit 6797bf8

Please sign in to comment.