Skip to content

Commit e03da0e

Browse files
author
Chance Strickland
committed
Add examples showing mocks of our API methods
1 parent d8e251d commit e03da0e

File tree

2 files changed

+44
-10
lines changed

2 files changed

+44
-10
lines changed

src/App.test.js

Lines changed: 42 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,28 @@
22
import React from "react";
33
import { Progress } from "./Progress";
44
import userEvent from "@testing-library/user-event";
5-
import { fireEvent, render } from "@testing-library/react";
5+
import {
6+
fireEvent,
7+
render,
8+
waitForElementToBeRemoved,
9+
} from "@testing-library/react";
610
import { App } from "./App";
11+
import { api } from "./api";
12+
13+
jest.mock("./api");
714

815
describe("<App />", () => {
16+
beforeEach(() => {
17+
api.totalMinutes.update.mockImplementation((newValue) => {
18+
console.log("mocked!");
19+
return Promise.resolve({ status: 200, value: newValue });
20+
});
21+
api.completedMinutes.update.mockImplementation((newValue) => {
22+
console.log("mocked!");
23+
return Promise.resolve({ status: 200, value: newValue });
24+
});
25+
});
26+
927
it("should render the text input", () => {
1028
let { getByRole } = render(<App />);
1129
expect(getByRole("textbox")).toBeInTheDocument();
@@ -22,29 +40,45 @@ describe("<App />", () => {
2240
expect(getByText("No time allocated yet")).toBeInTheDocument();
2341
});
2442

25-
test("should read 100% Complete when task time is at max", () => {
43+
test("should read 100% Complete when task time is at max", async () => {
2644
let { getByRole, getByText, getByLabelText } = render(<App />);
2745
let slider = getByRole("slider");
2846
let input = getByRole("textbox");
2947

3048
userEvent.type(input, "2");
49+
await waitForLoadingElementToBeRemoved();
50+
3151
fireEvent.click(slider);
52+
await waitForLoadingElementToBeRemoved();
3253

3354
// nudge twice
55+
3456
fireEvent.keyDown(slider, { key: "ArrowRight" });
57+
await waitForLoadingElementToBeRemoved();
58+
3559
fireEvent.keyDown(slider, { key: "ArrowRight" });
60+
await waitForLoadingElementToBeRemoved();
3661

3762
fireEvent.click(getByLabelText("Subtract"));
63+
await waitForLoadingElementToBeRemoved();
3864

3965
expect(getByText("100% complete")).toBeInTheDocument();
4066
});
4167

42-
test("should read 0% Complete when task time is at min", () => {
43-
let { getByRole, getByText, getByLabelText, container } = render(<App />);
44-
let input = getByRole("textbox");
45-
userEvent.type(input, "2");
68+
// test("should read 0% Complete when task time is at min", () => {
69+
// let { getByRole, getByText, getByLabelText, container } = render(<App />);
70+
// let input = getByRole("textbox");
71+
// userEvent.type(input, "2");
4672

47-
expect(getByText("0% complete")).toBeInTheDocument();
48-
});
73+
// expect(getByText("0% complete")).toBeInTheDocument();
74+
// });
4975
});
5076
});
77+
78+
async function waitForLoadingElementToBeRemoved() {
79+
let blocker = document.querySelector(".loading-blocker");
80+
if (!blocker) {
81+
return true;
82+
}
83+
return await waitForElementToBeRemoved(blocker);
84+
}

src/api.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
export const api = {
22
completedMinutes: {
33
update(newValue: number) {
4-
console.log("updating");
4+
console.log("updating REAL api!");
55
return new Promise<ApiResponse>((res) =>
66
window.setTimeout(() => res({ status: 200, value: newValue }), 1000)
77
);
88
},
99
},
1010
totalMinutes: {
1111
update(newValue: number) {
12-
console.log("updating");
12+
console.log("updating REAL api!");
1313
return new Promise<ApiResponse>((res) =>
1414
window.setTimeout(() => res({ status: 200, value: newValue }), 1000)
1515
);

0 commit comments

Comments
 (0)