Skip to content

Commit c17d6a2

Browse files
committed
test: More coverage
1 parent 938fecf commit c17d6a2

File tree

6 files changed

+7958
-7714
lines changed

6 files changed

+7958
-7714
lines changed

CONTRIBUTING.md

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,17 @@ For now, try to following existing patterns. Formalized code-guidelines will com
4242
- First, make sure you create a link between your local package and the testing-app. In the root of the repository:
4343
4444
```bash
45-
$ npm link
46-
$ cd testing-app
47-
$ npm link @ryfylke-react/rtk-query-loader
45+
$ yarn run setup-link
4846
```
4947
48+
> If this doesn't work, try to run the commands manually:
49+
>
50+
> ```bash
51+
> $ npm link
52+
> $ cd testing-app
53+
> $ npm link @ryfylke-react/rtk-query-loader
54+
> ```
55+
5056
- In the `testing-app` directory, install dependencies, and then run the tests:
5157
5258
```bash

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99
"build": "yarn build:esm && yarn build:cjs",
1010
"build:esm": "tsc",
1111
"build:cjs": "tsc --module commonjs --outDir dist/cjs",
12-
"prepare": "yarn build"
12+
"prepare": "yarn build",
13+
"setup-link": "npm link && cd testing-app && npm link @ryfylke-react/rtk-query-loader"
1314
},
1415
"repository": {
1516
"type": "git",

src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
export { aggregateToQuery } from "./aggregateToQuery";
12
export { createLoader, createUseLoader } from "./createLoader";
23
export { RTKLoader } from "./RTKLoader";
34
export type {

testing-app/src/testComponents.tsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
/* eslint-disable react-hooks/rules-of-hooks */
2+
import {
3+
createLoader,
4+
InferLoaderData,
5+
withLoader,
6+
} from "@ryfylke-react/rtk-query-loader";
27
import { useRef, useState } from "react";
38
import { aggregateToQuery } from "../../src/aggregateToQuery";
4-
import { createLoader } from "../../src/createLoader";
5-
import { InferLoaderData } from "../../src/types";
6-
import { withLoader } from "../../src/withLoader";
79
import {
810
Pokemon,
911
Pokemons,

testing-app/src/tests.test.tsx

Lines changed: 46 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
/* eslint-disable react-hooks/rules-of-hooks */
2+
import {
3+
createLoader,
4+
withLoader,
5+
} from "@ryfylke-react/rtk-query-loader";
26
import userEvent from "@testing-library/user-event";
37
import { useState } from "react";
4-
import { createLoader } from "../../src/createLoader";
5-
import { withLoader } from "../../src/withLoader";
68
import {
79
useGetPokemonByNameQuery,
810
useGetPokemonsQuery,
@@ -14,9 +16,13 @@ import {
1416
LoadPokemon,
1517
SimpleLoadedComponent,
1618
TestAggregateComponent,
17-
TestTransformed,
1819
} from "./testComponents";
19-
import { render, screen, waitFor } from "./utils";
20+
import {
21+
render,
22+
screen,
23+
waitFor,
24+
waitForElementToBeRemoved,
25+
} from "./utils";
2026

2127
describe("aggregateToQuery", () => {
2228
test("It aggregates query status", async () => {
@@ -59,7 +65,9 @@ describe("withLoader", () => {
5965

6066
test("onFetching renders when applicable", async () => {
6167
render(<FetchTestRenderer />);
62-
expect(screen.getByText("Loading")).toBeVisible();
68+
await waitForElementToBeRemoved(() =>
69+
screen.queryByText("Loading")
70+
);
6371
await waitFor(() =>
6472
expect(screen.getByRole("textbox")).toBeVisible()
6573
);
@@ -68,34 +76,57 @@ describe("withLoader", () => {
6876
await waitFor(() =>
6977
expect(screen.getByText("Fetching")).toBeVisible()
7078
);
79+
await waitForElementToBeRemoved(() =>
80+
screen.queryByText("Fetching")
81+
);
7182
await waitFor(() =>
7283
expect(screen.getByText("#3")).toBeVisible()
7384
);
7485
});
7586

76-
test("whileFetching renders when applicable", async () => {
87+
test("Internal state won't reset when using whileFetching", async () => {
7788
render(<FetchTestRenderer while />);
78-
expect(screen.getByText("Loading")).toBeVisible();
89+
await waitForElementToBeRemoved(() =>
90+
screen.queryByText("Loading")
91+
);
7992
await waitFor(() =>
8093
expect(screen.getByRole("textbox")).toBeVisible()
8194
);
8295
const input = screen.getByRole("textbox");
8396
userEvent.type(input, "Abc{Enter}");
84-
await waitFor(
85-
() =>
86-
expect(screen.getByText("FetchingWhile")).toBeVisible(),
87-
{ interval: 20 }
97+
await waitFor(() =>
98+
expect(screen.getByText("FetchingWhile")).toBeVisible()
99+
);
100+
await waitForElementToBeRemoved(() =>
101+
screen.queryByText("FetchingWhile")
88102
);
89103
await waitFor(() =>
90104
expect(screen.getByText("#3")).toBeVisible()
91105
);
106+
expect(screen.getByRole("textbox")).toHaveValue("Abc");
92107
});
93108

94-
test("Can transform the output of the loader", async () => {
95-
render(<TestTransformed />);
109+
// Not wanted behavior, but expected behavior:
110+
test("Internal state will reset when using onFetching", async () => {
111+
render(<FetchTestRenderer />);
112+
await waitForElementToBeRemoved(() =>
113+
screen.queryByText("Loading")
114+
);
96115
await waitFor(() =>
97-
expect(screen.getByText("charizard")).toBeVisible()
116+
expect(screen.getByRole("textbox")).toBeVisible()
117+
);
118+
const input = screen.getByRole("textbox");
119+
userEvent.type(input, "Abc{Enter}");
120+
await waitFor(() =>
121+
expect(screen.getByText("Fetching")).toBeVisible()
122+
);
123+
await waitForElementToBeRemoved(() =>
124+
screen.queryByText("Fetching")
125+
);
126+
await waitFor(() =>
127+
expect(screen.getByText("#3")).toBeVisible()
98128
);
129+
expect(screen.getByRole("textbox")).toHaveValue("");
99130
});
100131

101132
describe(".extend()", () => {
@@ -241,7 +272,7 @@ describe("withLoader", () => {
241272
<ul>
242273
<li>{loaderData[0].data.name}</li>
243274
{loaderData[1].data.results.map((pokemon) => (
244-
<li>{pokemon.name}</li>
275+
<li key={pokemon.name}>{pokemon.name}</li>
245276
))}
246277
</ul>
247278
</div>

0 commit comments

Comments
 (0)