Zabawna testowa grupa asynchronicznych funkcji z obietnicą.wszystkie

0

Pytanie

Staram się przetestować te funkcje, ale jest kilka wierszy, których nie mogę ogarnąć,

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;

To jest mój test, dane użytkownika, organizacja i klucze związane z fałszywymi danymi, chcę przetestować getUserDetail funkcja, ale gdy uruchamiam testy, wykryto kilka wierszy, które zostały wykryte.

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

Najlepsza odpowiedź

1

Te wiersze nie są, bo jaja sobie robicie nad ich realizacją

2021-11-23 18:12:27

Dziękuję za odpowiedź, ale te wiersze są wywołań API, nie chcę wywoływać serwer dla każdego testu. jak mogę ogarnąć te wiersze, nie powodując API?
GeeGeeks

zdrada axios zamiast swoich funkcji
Jacob Waller

W innych językach

Ta strona jest w innych językach

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