Jest mockImplementation не является функцией

#javascript #node.js #jestjs #mocking

#javascript #node.js #jestjs #издевательство

Вопрос:

У меня есть этот упрощенный тест Jest:

 import login from "../../src/controller/auth/login";
import findUserByEmail from "../../src/api/db/find-user-by-email";

jest.mock("../../src/api/db/find-user-by-email");
const mockedfindUserByEmail = findUserByEmail as jest.Mocked<typeof findUserByEmail>;

describe("Login API", () => {
  test('should return 401', async () => {

    const req = {
      email: "email@domain.com",
      password: "password"
    };

    mockedfindUserByEmail.mockImplementation(async () => false)

    expect(await login(req).status).toBe(401);
  });
});
  

Я получил этот макет из документов. Когда я не издеваюсь, тест работает нормально, потому login что модуль подключается к базе данных. Но когда я использую приведенный выше макет, я получаю:

 TypeError: findUserByEmail.mockImplementation is not a function
  

Вы можете помочь?

Файл поиска пользователя по электронной почте:

 import { User } from "../../entities/main/user";
const db: any = require("../../db/models");

export default async (email: string)
  : Promise<User> => {
  return await db.user.findOne({
    where: { email },
    raw: true,
  });
};
  

Комментарии:

1. Может ../../src/api/db/find-user-by-email быть, у него нет экспорта по умолчанию?

2. @Teneff Спасибо! Но у него есть экспорт по умолчанию. Я отредактировал вопрос — добавил его код.

3. это выглядит нормально, вероятно, вам следует попытаться создать воспроизводимый пример. Или, если это ошибка typescript, вы должны ее использовать findUserByEmail as jest.Mocked<typeof findUserByEmail>

4. @Teneff Как именно я должен это сделать? Если это должно быть так, как я только что обновил вопрос, я все равно получаю ошибку Typescript Property 'mockImplementation' does not exist on type 'Mocked<(email: string) => Promise<User>>'.

5. @Teneff ХОРОШО, я понял свою ошибку. Я не должен издеваться find-user-by-email . Я должен издеваться над самим модулем БД (тот, который импортирован в поиск пользователя по электронной почте во второй строке). Я издевался над этим, и тест работал без доступа к БД. Спасибо за попытку помочь!