Jest ทดสอบกลุ่มของ async ฟังก์ชันกับสัญญาทั้

0

คำถาม

ฉันพยายามจะทดสอบพวกนี้ฟังก์ชันแต่มันมีไม่กี่บรรทัดนั้นฉันไม่สามารถปกปิดมัน,

userDetail.ts

export const getUser = async (email: string) => {
    const { data } = await axios.get(config.apiUrl + "/user");
    return data;
};

export const getOrganization = async (email: string) => {
    const { data } = await axios.get(config.apiUrl + "/organization");
    return data;
};

export const getKeys = async (org: string) => {
    const { data } = await axios.get(
        config.apiUrl + "/keys/" + org
    );

    return data;
};

// This is the part that can't get covered with the tests
const getUserDetail = async (email: string) => {
    const [user, org] = await Promise.all([getUser(email), getOrganization(email)]);
    const keys = await getKeys(org);
    return {
        user: user,
        roles: [user.role],
        orgs: (org.items || []).filter((orgItem: OrgItem) => {
            return orgItem.active;
        }),
        keys: keys.items,
    };
};

export default getUserDetail;

นี่คือของฉันการทดสอบ userData อองค์กรและกุญแจ consts กับอย่าล้อเลีข้อมูล,ฉันอยากจะทดสอบ getUserDetail ฟังก์ชันแต่ตอนที่ฉันวิ่งการทดลองตรวจสอบมันแค่ไม่กี่บรรทัดที่ถูกเผยออกมา

jest.mock("axios");

jest.mock("./userDetail", () => {
    const originalModule = jest.requireActual("./userDetail");

    //Mock the default export and named export 'foo'
    return {
        __esModule: true,
        ...originalModule,
        default: jest.fn(async () => {
            return {
                user: userData,
                roles: [userData.role],
                orgs: [organization],
                apikeys: apiKeys,
            };
        }),
    };
});

describe("Test userDetail", () => {
    // This is the part that I can't cover with the tests
    it("getUserDetail should return the mocked response", async () => {
        expect.assertions(1);
        const userDetail = await getUserDetail("[email protected]");
        expect(userDetail).toEqual({
            user: userData,
            roles: [userData.role],
            orgs: [organization],
            keys: keys,
        });
    });

    it("getUser should return an user", async () => {
        expect.assertions(1);
        const payload = { data: userData };
        axios.get = jest.fn().mockResolvedValue(payload);
        await expect(getUser("[email protected]")).resolves.toEqual(userData);
    });

    it("getOrganization should return an organization", async () => {
        expect.assertions(1);
        const payload = { data: organization };
        axios.get = jest.fn().mockResolvedValue(payload);
        await expect(getOrganization("[email protected]")).resolves.toEqual(organization);
    });

    it("getKeys should return an array of keys", async () => {
        expect.assertions(1);
        const payload = { data: keys };
        axios.get = jest.fn().mockResolvedValue(payload);
        await expect(
            getKeys({
                items: [organization],
                total: 0,
                page: 0,
                per_page: 0,
            })
        ).resolves.toEqual(keys);
    });
});


javascript jestjs node.js unit-testing
2021-11-22 22:33:54
1

คำตอบที่ดีที่สุด

1

พวกนั้นบรรทัดจะไม่ถูกปกปิดเพราะว่าคุณกำลังล้อเลียนที่ implementation ของพวกเขา

2021-11-23 18:12:27

ขอบคุณสำหรับคำตอบของคุณแต่พวกนั้นบรรทัดเป็นรูปแบบ api นโทรมาฉันไม่อยากเรียกโดยเซิร์ฟเวอร์สำหรับแต่ละการทดสอบ ยังไงฉันปกปิดพวกนั้นบรรทัดโดยไม่มีโทรเรียกรูปแบบ api?
GeeGeeks

ล้อเลียน axios แทนที่จะเป็นของคุณฟังก์ชัน
Jacob Waller

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่