Как можно имитировать методы экземпляра для класса, который имитируется с помощью 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();
});
});
🤔 А знаете ли вы, что...
JavaScript поддерживает работу с различными форматами данных, такими как JSON и XML.
Создавая макет класса 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();
});