繁体   English   中英

问题 mocking 一种使用玩笑进行数据库调用的方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM