我面临的问题模拟一个方法,内部调用数据库获取数据。请在下面找到代码:
const getData = async (...args) => {
// first call
await db.getData();
// second call
await db.queryData();
return data;
}
const generateResult = async (...args) => {
const data = await getData(...args);
// rest of the code
return result;
}
export ClassTest;
在测试文件中:
describe(('Verify generateResult') => {
jest.spyOn(generateResult, 'getData').mockImplementation((...args) => {
return data;
});
it('should return result', async () => {
const result = await generateResult(..args);
expect(result).toBeTruthy();
});
});
getData方法进行数据库调用以检索数据。代码的其余部分只是处理数据并返回结果。即使它被模仿,代码在进行数据库调用时也会失败。我假设它应该从模拟的实现中获取数据,其余的代码应该执行。不知道这里出了什么问题。任何人都可以请让我知道。没有很多编写jest测试用例的经验。
谢谢
2条答案
按热度按时间5fjcxozz1#
有没有可能将
getData
方法移到另一个模块?然后你可以模仿getData
,导入的版本将是到处都被模仿的版本。只是个想法getData.js
dbUtils.js
和测试:
3phpmpom2#
在这篇文章中回答了类似的问题:Jest mock inner function
如果您将helper函数getData移到一个单独的模块中并将该模块导入generateResult,这将有所帮助。见下文:
helper.js
index.js
和测试: