marchaos / jest-mock-extended

Type safe mocking extensions for Jest https://www.npmjs.com/package/jest-mock-extended
MIT License
828 stars 57 forks source link

`mockResolvedValue` Type Error #76

Closed eunchurnpark closed 2 years ago

eunchurnpark commented 2 years ago

First, I'm using prisma as Type ORM client with apollo-server-express. My use case is context mock like below

context/contextMock.ts

import { MockProxy, mockDeep } from "jest-mock-extended";
import { Request, Response } from "express";

export type MockContext = {
  request: MockProxy<Request>;
  response: MockProxy<Response>;
  ...
}

export const createMockContext = (): MockContext => {
  return {
    request: mockDeep<Request>(),
    response: mockDeep<Response>(),
    ...
  }
}

myErrorTestCode.spec.ts

import { MockContext, Context, createMockContext } from "~/context/contextMock";
import { myRequest, myController } from "..";
import expressRequestMock from "express-request-mock";

let mockCtx: MockContext;
let ctx: Context;
let myController: MyController;

describe("myRequest", () => {
  beforeEach(() => {
    mockCtx = createMockContext();
    ctx = mockCtx as unknown as Context; // Needed until https://github.com/marchaos/jest-mock-extended/issues/25
    myController = new myRequest(ctx.prisma)
      .myController;
  });
  it("should return isExist is false when token is not exist", async () => {
    mockCtx.prisma.myToken.findFirst.mockResolvedValue(null); // <-- Type Error
    const resJson = {
      status: 400,
      errorCode: 10021,
      message: "Invalid token",
      schema,
      version,
    };
    const { res } = await expressRequestMock(myController);
    const data = JSON.parse(res._getData());
    expect(res.statusCode).toBe(400);
    expect(data).toEqual(resJson);
  });
}

It was fine jest-mock-extended@1.0.18. after upgrate to jest-mock-extended@2.0.0 report type error not having mockResolvedValue

How can I change use case in version 2?

Thank you.

eunchurnpark commented 2 years ago

I found createMockContext() function return type is not MockContext.

I made type

export type CreateMockContext = ReturnType<typeof createMockContext>;

and imported type to test codes

let mockCtx: CreateMockContext;

and fixed them.