#Jest Unit Testing Error

3 messages · Page 1 of 1 (latest)

static riverBOT
#

You chose to compile with the bot. One moment while I piece together your answer…

static riverBOT
# static river You chose to compile with the bot. One moment while I piece together your answer...

I see you're having an issue with mocking Prisma Client in your Jest unit tests. The error you're encountering is because mockResolvedValue is not available directly on the mocked function.

The issue is in how you're setting up your mock. When you mock Prisma Client, you need to ensure that the mocked methods also have the Jest mock functionality attached to them.

Here's how you can fix your code:

import { getAllBlog } from "../controller/blog.controller.js";
import { PrismaClient } from "@prisma/client";
import { jest } from "@jest/globals";

// Improved Prisma Client mocking
jest.mock("@prisma/client", () => {
  return {
    PrismaClient: jest.fn().mockImplementation(() => ({
      post: {
        findMany: jest.fn().mockResolvedValue([]), // Pre-define a default return value
      },
    })),
  };
});

const prisma = new PrismaClient();

describe("Get All Blogs", () => {
  let req, res;

  beforeEach(() => {
    req = {};
    res = {
      json: jest.fn(),
      status: jest.fn().mockReturnThis(),
    };
    // Reset mocks between tests
    jest.clearAllMocks();
  });

  test("Get Blog", async () => {
    const mockBlog = [
      {
        id: "1",
        title: "Title 1",
        body: "Body 1",
        userId: "11",
        updatedAt: new Date(),
        createdAt: new Date(),
      },
    ];

    // Set the mock return value for this specific test
    prisma.post.findMany.mockResolvedValue(mockBlog);

    await getAllBlog(req, res);

    // Assertions
    expect(prisma.post.findMany).toHaveBeenCalled();
    expect(res.json).toHaveBeenCalledWith(mockBlog);
  });
});

The key difference is that I've initialized findMany with jest.fn().mockResolvedValue([]) in the mock setup, which ensures that the function has the Jest mock methods attached to it.

For more complex scenarios, you might want to consider using the jest-mock-extended package which is recommended in Prisma's official documentation for unit testing. This package makes it

static riverBOT