fix(#182): fix Prisma enum import in job-steps tests
Fixed failing tests in job-steps.service.spec.ts and job-steps.controller.spec.ts caused by undefined Prisma enum imports in the test environment. Root cause: When importing JobStepPhase, JobStepType, and JobStepStatus from @prisma/client in the test environment with mocked Prisma, the enums were undefined, causing "Cannot read properties of undefined" errors. Solution: Used vi.mock() with importOriginal to mock the @prisma/client module and explicitly provide enum values while preserving other exports like PrismaClient. Changes: - Added vi.mock() for @prisma/client in both test files - Defined all three enums (JobStepPhase, JobStepType, JobStepStatus) with their values - Moved imports after the mock setup to ensure proper initialization Test results: All 16 job-steps tests now passing (13 service + 3 controller) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,12 +1,41 @@
|
||||
import { describe, it, expect, beforeEach, vi } from "vitest";
|
||||
import { Test, TestingModule } from "@nestjs/testing";
|
||||
import { ExecutionContext } from "@nestjs/common";
|
||||
|
||||
// Mock @prisma/client BEFORE importing other modules
|
||||
vi.mock("@prisma/client", async (importOriginal) => {
|
||||
const actual = await importOriginal<typeof import("@prisma/client")>();
|
||||
return {
|
||||
...actual,
|
||||
JobStepPhase: {
|
||||
SETUP: "SETUP",
|
||||
EXECUTION: "EXECUTION",
|
||||
VALIDATION: "VALIDATION",
|
||||
CLEANUP: "CLEANUP",
|
||||
},
|
||||
JobStepType: {
|
||||
COMMAND: "COMMAND",
|
||||
AI_ACTION: "AI_ACTION",
|
||||
GATE: "GATE",
|
||||
ARTIFACT: "ARTIFACT",
|
||||
},
|
||||
JobStepStatus: {
|
||||
PENDING: "PENDING",
|
||||
RUNNING: "RUNNING",
|
||||
COMPLETED: "COMPLETED",
|
||||
FAILED: "FAILED",
|
||||
SKIPPED: "SKIPPED",
|
||||
},
|
||||
};
|
||||
});
|
||||
|
||||
// Import after mocking
|
||||
import { JobStepsController } from "./job-steps.controller";
|
||||
import { JobStepsService } from "./job-steps.service";
|
||||
import { JobStepPhase, JobStepType, JobStepStatus } from "@prisma/client";
|
||||
import { AuthGuard } from "../auth/guards/auth.guard";
|
||||
import { WorkspaceGuard } from "../common/guards/workspace.guard";
|
||||
import { PermissionGuard } from "../common/guards/permission.guard";
|
||||
import { ExecutionContext } from "@nestjs/common";
|
||||
|
||||
describe("JobStepsController", () => {
|
||||
let controller: JobStepsController;
|
||||
|
||||
@@ -1,11 +1,42 @@
|
||||
import { describe, it, expect, beforeEach, vi } from "vitest";
|
||||
import { Test, TestingModule } from "@nestjs/testing";
|
||||
import { JobStepsService } from "./job-steps.service";
|
||||
import { PrismaService } from "../prisma/prisma.service";
|
||||
import { JobStepPhase, JobStepType, JobStepStatus } from "@prisma/client";
|
||||
import { NotFoundException } from "@nestjs/common";
|
||||
import { CreateStepDto, UpdateStepDto } from "./dto";
|
||||
|
||||
// Mock @prisma/client BEFORE importing the service
|
||||
vi.mock("@prisma/client", async (importOriginal) => {
|
||||
const actual = await importOriginal<typeof import("@prisma/client")>();
|
||||
return {
|
||||
...actual,
|
||||
JobStepPhase: {
|
||||
SETUP: "SETUP",
|
||||
EXECUTION: "EXECUTION",
|
||||
VALIDATION: "VALIDATION",
|
||||
CLEANUP: "CLEANUP",
|
||||
},
|
||||
JobStepType: {
|
||||
COMMAND: "COMMAND",
|
||||
AI_ACTION: "AI_ACTION",
|
||||
GATE: "GATE",
|
||||
ARTIFACT: "ARTIFACT",
|
||||
},
|
||||
JobStepStatus: {
|
||||
PENDING: "PENDING",
|
||||
RUNNING: "RUNNING",
|
||||
COMPLETED: "COMPLETED",
|
||||
FAILED: "FAILED",
|
||||
SKIPPED: "SKIPPED",
|
||||
},
|
||||
};
|
||||
});
|
||||
|
||||
// Import after mocking
|
||||
import { JobStepsService } from "./job-steps.service";
|
||||
import { PrismaService } from "../prisma/prisma.service";
|
||||
|
||||
// Re-import the enums from the mock for use in tests
|
||||
import { JobStepPhase, JobStepType, JobStepStatus } from "@prisma/client";
|
||||
|
||||
describe("JobStepsService", () => {
|
||||
let service: JobStepsService;
|
||||
let prisma: PrismaService;
|
||||
|
||||
Reference in New Issue
Block a user