Skip to content

Commit

Permalink
fix: add missing coverage provider dependency
Browse files Browse the repository at this point in the history
  • Loading branch information
nikovirtala committed Dec 29, 2024
1 parent 6f77555 commit 9953401
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 3 deletions.
25 changes: 22 additions & 3 deletions src/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { Component } from "projen/lib/component";
import { DependencyType } from "projen/lib/dependencies";
import { Jest, NodeProject } from "projen/lib/javascript";
import { Project } from "projen/lib/project";
import { TextFile } from "projen/lib/textfile";
Expand Down Expand Up @@ -220,9 +221,10 @@ export class Vitest extends Component {
private readonly coverageEnabled: boolean;
private environment: string;
private globals: boolean;
private coverageProvider: string;
private coverageReporters: Array<string>;
private coverageProvider: CoverageProvider;
private coverageReporters: Array<CoverageReporter>;
private coverageDirectory: string;
private version: string;

constructor(project: NodeProject, options: VitestOptions = {}) {
super(project);
Expand All @@ -242,9 +244,11 @@ export class Vitest extends Component {
this.coverageProvider = options.config?.coverageProvider ?? CoverageProvider.V8;
this.coverageReporters = options.config?.coverageReporters ?? [CoverageReporter.TEXT, CoverageReporter.LCOV];
this.coverageDirectory = options.config?.coverageDirectory ?? "coverage";
this.version = options.vitestVersion ?? "^2";

project.addDevDeps(`vitest@${options.vitestVersion ?? "^2"}`);
project.addDevDeps(`vitest@${this.version}`);

this.configureCoverageProvider(this.coverageProvider);
this.addTestCommand();
this.synthesizeConfig();
}
Expand All @@ -267,6 +271,21 @@ export class Vitest extends Component {
}

public configureCoverageProvider(provider: CoverageProvider): void {
const providerPackages = {
[CoverageProvider.V8]: `@vitest/coverage-v8@${this.version}`,
[CoverageProvider.ISTANBUL]: `@vitest/coverage-istanbul@${this.version}`,
};

// remove existing provider packages if they exist
Object.values(providerPackages).forEach((providerPackage) => {
try {
this.project.deps.removeDependency(providerPackage);
} catch {
// ignore errors when dependency doesn't exist
}
});

this.project.deps.addDependency(providerPackages[provider], DependencyType.DEVENV);
this.coverageProvider = provider;
this.synthesizeConfig();
}
Expand Down
12 changes: 12 additions & 0 deletions test/vitest.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,10 @@ describe("vitest", () => {
expect(() => new Vitest(project)).not.toThrow();

const snapshot = synthSnapshot(project);

expect(snapshot["vitest.config.ts"]).toBeDefined();
expect(snapshot["package.json"].devDependencies.vitest).toBe("^2");
expect(snapshot["package.json"].devDependencies["@vitest/coverage-v8"]).toBe("^2");
});

test("custom environment", () => {
Expand All @@ -50,7 +52,9 @@ describe("vitest", () => {
vitest.configureCoverageProvider(CoverageProvider.ISTANBUL);

const snapshot = synthSnapshot(project);

expect(snapshot["vitest.config.ts"]).toContain('provider: "istanbul"');
expect(snapshot["package.json"].devDependencies["@vitest/coverage-istanbul"]).toBe("^2");
});

test("custom coverage reporters", () => {
Expand All @@ -77,6 +81,14 @@ describe("vitest", () => {
expect(snapshot["vitest.config.ts"]).toContain('"**/*.test.js"');
});

test("handles non-existent dependencies gracefully", () => {
const vitest = new Vitest(project);

expect(() => vitest.configureCoverageProvider(CoverageProvider.V8)).not.toThrow();
expect(() => vitest.configureCoverageProvider(CoverageProvider.ISTANBUL)).not.toThrow();
expect(() => vitest.configureCoverageProvider(CoverageProvider.V8)).not.toThrow();
});

test("initialize with custom options", () => {
new Vitest(project, {
configFilePath: "custom.vitest.config.ts",
Expand Down

0 comments on commit 9953401

Please sign in to comment.