如何在玩笑中模拟外部函数调用
How to mock external function call in jest
我想用 jest 测试这个功能。这是我的代码-
templeate.ts
export const generateSalamWelcome = async function (
actionSource: IActionSource,
actionDetails: IActionDetails
): Promise<IReplyTemplate[] | undefined> {
try {
const { pageId } = actionSource;
const { actionExt } = actionDetails;
const restaurantData = await getRestaurantQueriesMultiple(pageId, []);
if (restaurantData) {
const replyTemplates: IReplyTemplate[] = [];
const { enOnly, bnOnly } = restaurantData;
const mode = getMode(enOnly, bnOnly, actionExt || languageModes.EN);
replyTemplates.push(
generateTextTemplate(
selectTextEnBn(mode, strings.salamWelcomeEn, strings.salamWelcomeBn)
)
);
return replyTemplates;
}
} catch (err) {
logger.error(err);
}
};
我想模拟 getRestaurantQueriesMultiple、getMode 和 generateTextTemplate 函数。我如何正确模拟它们以 return 一些虚拟结果?
你可以开玩笑地使用mockImplementation()
。有了这个,您可以 spyOn()
对 class 方法或文件中的函数。例如,在您的情况下,让我们考虑一个文件名 MyFile.ts
,您在其中导出了函数 getMode()
。如果您的 getMode()
存在于同一个文件 template.ts
中,那么不要将文件名视为 MyFile
,而是使用 template.ts
。所以,在你的 it
块中你可以做这样的事情,
const dummyResult = 'dummyData';
jest.spyOn(MyFile, 'getMode')
.mockImplementation(() => {
return Promise.resolve(dummyResult);
})
同样,您可以对 getRestaurantQueriesMultiple()
和 generateTextTemplate()
执行相同的操作。但是请确保在调用实际函数之前模拟所有这些函数,在您的情况下是 generateSalamWelcome()
您可以在此处阅读有关 mockImplementation()
的更多信息 Jest Mock Implementation
我想用 jest 测试这个功能。这是我的代码-
templeate.ts
export const generateSalamWelcome = async function (
actionSource: IActionSource,
actionDetails: IActionDetails
): Promise<IReplyTemplate[] | undefined> {
try {
const { pageId } = actionSource;
const { actionExt } = actionDetails;
const restaurantData = await getRestaurantQueriesMultiple(pageId, []);
if (restaurantData) {
const replyTemplates: IReplyTemplate[] = [];
const { enOnly, bnOnly } = restaurantData;
const mode = getMode(enOnly, bnOnly, actionExt || languageModes.EN);
replyTemplates.push(
generateTextTemplate(
selectTextEnBn(mode, strings.salamWelcomeEn, strings.salamWelcomeBn)
)
);
return replyTemplates;
}
} catch (err) {
logger.error(err);
}
};
我想模拟 getRestaurantQueriesMultiple、getMode 和 generateTextTemplate 函数。我如何正确模拟它们以 return 一些虚拟结果?
你可以开玩笑地使用mockImplementation()
。有了这个,您可以 spyOn()
对 class 方法或文件中的函数。例如,在您的情况下,让我们考虑一个文件名 MyFile.ts
,您在其中导出了函数 getMode()
。如果您的 getMode()
存在于同一个文件 template.ts
中,那么不要将文件名视为 MyFile
,而是使用 template.ts
。所以,在你的 it
块中你可以做这样的事情,
const dummyResult = 'dummyData';
jest.spyOn(MyFile, 'getMode')
.mockImplementation(() => {
return Promise.resolve(dummyResult);
})
同样,您可以对 getRestaurantQueriesMultiple()
和 generateTextTemplate()
执行相同的操作。但是请确保在调用实际函数之前模拟所有这些函数,在您的情况下是 generateSalamWelcome()
您可以在此处阅读有关 mockImplementation()
的更多信息 Jest Mock Implementation