Как издеваться над методами экземпляра класса, над которым издевались с помощью jest.mock?

Как можно имитировать методы экземпляра для класса, который имитируется с помощью jest.mock?

Например, над классом Logger высмеивается:

import Person from "./Person";
import Logger from "./Logger";

jest.mock("./Logger");

describe("Person", () => {
  it("calls Logger.method1() on instantiation", () => {
    Logger.method1.mockImplementation(() => {}) // This fails as `method1` is an instance method but how can the instance method be mocked here?
    new Person();
    
    expect(Logger.method1).toHaveBeenCalled();
  });
});

ты пробовал import Logger from jest.mock("./Logger")?

Some random IT boy 17.05.2022 21:15

выдает ошибку String literal expected

surajs02 17.05.2022 21:16

Извините, я имел в виду const Logger = jest.mock("./Logger")

Some random IT boy 17.05.2022 21:21

Это имеет смысл, но Logger.method1 выдает ошибку Property 'method' does not exist on type '"./Logger"'

surajs02 17.05.2022 21:23
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
1
4
19
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Создавая макет класса Logger, вы можете указать фабрику модулей в качестве второго аргумента для jest.mock. Вы можете обратиться к документы для получения дополнительной информации.

import Person from "./Person";

const mockConstructor = jest.fn();
const mockMethod1 = jest.fn();

jest.mock("./Logger.js", () => ({
  default: class mockLogger {
    constructor() {
      mockConstructor();
    }
    method1() {
      mockMethod1();
    }
  },
  __esModule: true
}));

it("works", () => {
  const p = new Person();
  expect(mockConstructor).toHaveBeenCalled();
  p.method1();
  expect(mockMethod1).toHaveBeenCalled();
});

принимая этот ответ, так как он выглядит как правильный способ издеваться над классом - не могли бы вы также включить ссылку на документацию, в которой объясняется использование фабричной функции для возврата класса по умолчанию и использование __esModule?

surajs02 17.05.2022 21:34

Я добавил ссылку на документацию в ответ, пожалуйста, проверьте!

SSM 17.05.2022 21:37

Документы объясняют это хорошо, ура!

surajs02 17.05.2022 21:38

Связанный вопрос о насмешке над конкретным методом, но с сохранением всех остальных stackoverflow.com/questions/72280312/…

surajs02 17.05.2022 22:31

Другие вопросы по теме