Я пытаюсь протестировать функцию с обратным вызовом внутри. Я настроил фиктивную функцию, но мне также нужно протестировать обратный вызов.
Я попытался отделить его как еще одну фиктивную функцию, но она не считается закрытой.
Функция, которую я пытаюсь проверить:
export const checkDescription = async page => {
const metaDescription = await page.$eval(
'meta[name = "description"]',
description => description.getAttribute("content")
);
return metaDescription;
};
Я издевался над функцией страницы:
const page = {
$eval: jest.fn(() => "Value")
};
мой тест:
test("Should return description", async () => {
expect(await checkDescription(page)).toBe("Value");
expect(page.$eval).toHaveBeenCalled();
});
Я попытался разделить описание:
const description = {
getAttribute: jest.fn(() => "Value")
};
но я не думаю, что это правильный способ скрыть описание внутри $eval.
он возвращает описание страницы в виде строки



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы близко!
Функция стрелки description передается вашей фиктивной функции page.$eval, поэтому вы можете использовать mockFn.mock.calls для ее извлечения.
Получив его, вы можете вызвать его напрямую, чтобы протестировать и получить полное покрытие кода:
test("Should return description", async () => {
expect(await checkDescription(page)).toBe("Value"); // Success!
expect(page.$eval).toHaveBeenCalled(); // Success!
const description = page.$eval.mock.calls[0][1]; // <= get the description arrow function
const getAttributeMock = jest.fn(() => 'mock content');
expect(description({ getAttribute: getAttributeMock })).toBe('mock content'); // Success!
expect(getAttributeMock).toHaveBeenCalledWith('content'); // Success!
// Success! checkDescription now has full code coverage
});
Есть ли какие-либо побочные эффекты вызова этой функции, которые вы могли бы наблюдать? Какое поведение он реализует?