Reputation: 77
I'm trying to test these functions, but there is a few lines that I can't cover,
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;
This is my test, userData, organization and keys are consts with mocked data, I want to test the getUserDetail
function but when I run the tests there are few lines that got uncovered.
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);
});
});
Upvotes: 2
Views: 1339
Reputation: 45
Those lines aren't being covered because you're mocking the implementation of them
Upvotes: 1