[英]issue with mocking a method which makes database calls using jest
我面临问题 mocking 一种在内部调用数据库以获取数据的方法。 请找到下面的代码:
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 方法进行数据库调用以检索数据。 代码的Rest只是对数据进行按摩并返回结果。 即使它被嘲笑,代码也会在进行数据库调用时失败。 我假设它应该从模拟实现中获取数据,并且代码的 rest 应该执行。 不知道这里出了什么问题。 谁能告诉我。 没有很多编写笑话测试用例的经验。
谢谢
您是否有机会将getData
方法移动到另一个模块? 然后你可以模拟getData
并且导入的版本将在任何地方都是模拟的。 只是一个想法。
getData.js
export const getData = async (...args) => {
const data = await Promise.resolve(false);
console.log('original called')
return data;
}
dbUtils.js
import { getData } from './getData'
export const generateResult = async (...args) => {
const data = await getData(...args);
return data;
}
和测试:
import * as getDataUtils from '../getData';
import { generateResult } from '../dbUtils';
it('should return result', async () => {
jest.spyOn(getDataUtils, 'getData').mockResolvedValue(true);
const result = await generateResult();
expect(result).toBeTruthy();
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.