Skip to content

Commit 2dd6d27

Browse files
committed
test for successful request
1 parent c763f73 commit 2dd6d27

File tree

4 files changed

+136
-8
lines changed

4 files changed

+136
-8
lines changed

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,10 +62,12 @@
6262
}
6363
},
6464
"setupFilesAfterEnv": [
65+
"@testing-library/jest-dom/extend-expect",
6566
"<rootDir>/test/setupTests.ts"
6667
]
6768
},
6869
"devDependencies": {
70+
"@testing-library/jest-dom": "^4.1.2",
6971
"@testing-library/react": "^9.3.0",
7072
"@testing-library/react-hooks": "^3.1.0",
7173
"@types/jest": "^24.0.12",

test/useAsync.test.ts

Lines changed: 45 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,71 @@
1-
import { useAsync } from '../src';
2-
import { cleanup } from '@testing-library/react';
1+
import { useAsync, UseAsyncReturn } from '../src';
32
import { FetchMock } from 'jest-fetch-mock/types';
3+
import { renderHook } from '@testing-library/react-hooks';
44

55
const fetch: FetchMock = global.fetch;
66

77
interface StarwarsHero {
88
name: string;
99
}
1010

11+
type StarwarsHeroArgs = {
12+
asyncFunction: () => Promise<StarwarsHero[]>;
13+
};
14+
1115
export const generateMockResponseData = (amount: number = 5): StarwarsHero[] =>
1216
[...Array(amount).keys()].map(n => ({
1317
id: n + 1,
1418
name: `Starwars Hero ${n + 1}`,
1519
}));
1620

1721
describe('useAync', () => {
18-
afterEach(cleanup);
22+
const fetchStarwarsHeroes = async (): Promise<StarwarsHero[]> => {
23+
const result = await fetch(`https://swapi.co/api/people/`);
24+
25+
return await result.json();
26+
};
27+
28+
const props = {
29+
asyncFunction: fetchStarwarsHeroes,
30+
};
31+
32+
const fakeResults = generateMockResponseData();
1933

2034
beforeEach(() => {
2135
fetch.resetMocks();
36+
37+
fetch.mockResponseOnce(JSON.stringify(fakeResults));
2238
});
2339

2440
it('should have a useAsync hook', () => {
2541
expect(useAsync).toBeDefined();
2642
});
2743

28-
// it('should set loading flag when request is initially made', () => {
44+
it('should set loading flag when request is initially made', () => {
45+
const { result } = renderHook<
46+
StarwarsHeroArgs,
47+
UseAsyncReturn<StarwarsHero[]>
48+
>(p => useAsync<StarwarsHero[], any[]>(p.asyncFunction, []), {
49+
initialProps: { ...props },
50+
});
2951

30-
// });
52+
expect(result.current.loading).toBe(true);
53+
expect(result.current.error).toBeUndefined();
54+
expect(result.current.result).toBeUndefined();
55+
});
56+
57+
it('should resolve a successful request', async () => {
58+
const { result, waitForNextUpdate } = renderHook<
59+
StarwarsHeroArgs,
60+
UseAsyncReturn<StarwarsHero[]>
61+
>(p => useAsync<StarwarsHero[], any>(p.asyncFunction, []), {
62+
initialProps: { ...props },
63+
});
64+
65+
await waitForNextUpdate();
66+
67+
expect(result.current.result).toEqual(fakeResults);
68+
expect(result.current.loading).toBe(false);
69+
expect(result.current.error).toBeUndefined();
70+
});
3171
});

tsconfig.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
{
22
"include": ["src", "types"],
3+
"exclude": ["test"],
34
"compilerOptions": {
45
"target": "es5",
56
"module": "esnext",

yarn.lock

Lines changed: 88 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -685,7 +685,7 @@
685685
js-levenshtein "^1.1.3"
686686
semver "^5.5.0"
687687

688-
"@babel/runtime@^7.5.4", "@babel/runtime@^7.6.0", "@babel/runtime@^7.6.2":
688+
"@babel/runtime@^7.5.1", "@babel/runtime@^7.5.4", "@babel/runtime@^7.6.0", "@babel/runtime@^7.6.2":
689689
version "7.6.3"
690690
resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.6.3.tgz#935122c74c73d2240cafd32ddb5fc2a6cd35cf1f"
691691
integrity sha512-kq6anf9JGjW8Nt5rYfEuGRaEAaH1mkv3Bbu6rYvLOpPh/RusSJXuKPEAoZ7L7gybZkchE8+NV5g9vKF4AGAtsA==
@@ -929,6 +929,21 @@
929929
pretty-format "^24.9.0"
930930
wait-for-expect "^3.0.0"
931931

932+
"@testing-library/jest-dom@^4.1.2":
933+
version "4.1.2"
934+
resolved "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-4.1.2.tgz#e523047191379abd67cf0896dfd93cabc7e33eab"
935+
integrity sha512-fNf2rCfu0dBD4DmpzqR2ibsaFlFojrWI/EuU8LLqv73CzFIMvT2RMq88p5JVRe4DfeNj0mu0MQ5FTG4mQ0qFaA==
936+
dependencies:
937+
"@babel/runtime" "^7.5.1"
938+
chalk "^2.4.1"
939+
css "^2.2.3"
940+
css.escape "^1.5.1"
941+
jest-diff "^24.0.0"
942+
jest-matcher-utils "^24.0.0"
943+
lodash "^4.17.11"
944+
pretty-format "^24.0.0"
945+
redent "^3.0.0"
946+
932947
"@testing-library/react-hooks@^3.1.0":
933948
version "3.1.0"
934949
resolved "https://registry.npmjs.org/@testing-library/react-hooks/-/react-hooks-3.1.0.tgz#f186c4f3b32db153d30d646faacb043ef4089807"
@@ -2212,6 +2227,21 @@ crypto-browserify@^3.11.0:
22122227
randombytes "^2.0.0"
22132228
randomfill "^1.0.3"
22142229

2230+
css.escape@^1.5.1:
2231+
version "1.5.1"
2232+
resolved "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb"
2233+
integrity sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s=
2234+
2235+
css@^2.2.3:
2236+
version "2.2.4"
2237+
resolved "https://registry.npmjs.org/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929"
2238+
integrity sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==
2239+
dependencies:
2240+
inherits "^2.0.3"
2241+
source-map "^0.6.1"
2242+
source-map-resolve "^0.5.2"
2243+
urix "^0.1.0"
2244+
22152245
[email protected], "cssom@>= 0.3.2 < 0.4.0":
22162246
version "0.3.6"
22172247
resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.6.tgz#f85206cee04efa841f3c5982a74ba96ab20d65ad"
@@ -2358,6 +2388,11 @@ diff-sequences@^24.3.0:
23582388
resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.3.0.tgz#0f20e8a1df1abddaf4d9c226680952e64118b975"
23592389
integrity sha512-xLqpez+Zj9GKSnPWS0WZw1igGocZ+uua8+y+5dDNTT934N3QuY1sp2LkHzwiaYQGz60hMq0pjAshdeXm5VUOEw==
23602390

2391+
diff-sequences@^24.9.0:
2392+
version "24.9.0"
2393+
resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5"
2394+
integrity sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==
2395+
23612396
diff@^3.2.0:
23622397
version "3.5.0"
23632398
resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12"
@@ -3128,6 +3163,11 @@ imurmurhash@^0.1.4:
31283163
resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
31293164
integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
31303165

3166+
indent-string@^4.0.0:
3167+
version "4.0.0"
3168+
resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
3169+
integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
3170+
31313171
31323172
version "0.0.1"
31333173
resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d"
@@ -3494,6 +3534,16 @@ jest-diff@^23.6.0:
34943534
jest-get-type "^22.1.0"
34953535
pretty-format "^23.6.0"
34963536

3537+
jest-diff@^24.0.0, jest-diff@^24.9.0:
3538+
version "24.9.0"
3539+
resolved "https://registry.npmjs.org/jest-diff/-/jest-diff-24.9.0.tgz#931b7d0d5778a1baf7452cb816e325e3724055da"
3540+
integrity sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==
3541+
dependencies:
3542+
chalk "^2.0.1"
3543+
diff-sequences "^24.9.0"
3544+
jest-get-type "^24.9.0"
3545+
pretty-format "^24.9.0"
3546+
34973547
jest-diff@^24.8.0:
34983548
version "24.8.0"
34993549
resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.8.0.tgz#146435e7d1e3ffdf293d53ff97e193f1d1546172"
@@ -3563,6 +3613,11 @@ jest-get-type@^24.8.0:
35633613
resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.8.0.tgz#a7440de30b651f5a70ea3ed7ff073a32dfe646fc"
35643614
integrity sha512-RR4fo8jEmMD9zSz2nLbs2j0zvPpk/KCEz3a62jJWbd2ayNo0cb+KFRxPHVhE4ZmgGJEQp0fosmNz84IfqM8cMQ==
35653615

3616+
jest-get-type@^24.9.0:
3617+
version "24.9.0"
3618+
resolved "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz#1684a0c8a50f2e4901b6644ae861f579eed2ef0e"
3619+
integrity sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==
3620+
35663621
jest-haste-map@^24.8.0:
35673622
version "24.8.0"
35683623
resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.8.0.tgz#51794182d877b3ddfd6e6d23920e3fe72f305800"
@@ -3611,6 +3666,16 @@ jest-leak-detector@^24.8.0:
36113666
dependencies:
36123667
pretty-format "^24.8.0"
36133668

3669+
jest-matcher-utils@^24.0.0:
3670+
version "24.9.0"
3671+
resolved "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz#f5b3661d5e628dffe6dd65251dfdae0e87c3a073"
3672+
integrity sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA==
3673+
dependencies:
3674+
chalk "^2.0.1"
3675+
jest-diff "^24.9.0"
3676+
jest-get-type "^24.9.0"
3677+
pretty-format "^24.9.0"
3678+
36143679
jest-matcher-utils@^24.8.0:
36153680
version "24.8.0"
36163681
resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-24.8.0.tgz#2bce42204c9af12bde46f83dc839efe8be832495"
@@ -4221,6 +4286,11 @@ mimic-fn@^2.0.0:
42214286
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
42224287
integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
42234288

4289+
min-indent@^1.0.0:
4290+
version "1.0.0"
4291+
resolved "https://registry.npmjs.org/min-indent/-/min-indent-1.0.0.tgz#cfc45c37e9ec0d8f0a0ec3dd4ef7f7c3abe39256"
4292+
integrity sha1-z8RcN+nsDY8KDsPdTvf3w6vjklY=
4293+
42244294
minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1:
42254295
version "1.0.1"
42264296
resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
@@ -4892,7 +4962,7 @@ pretty-format@^23.6.0:
48924962
ansi-regex "^3.0.0"
48934963
ansi-styles "^3.2.0"
48944964

4895-
pretty-format@^24.3.0, pretty-format@^24.9.0:
4965+
pretty-format@^24.0.0, pretty-format@^24.3.0, pretty-format@^24.9.0:
48964966
version "24.9.0"
48974967
resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz#12fac31b37019a4eea3c11aa9a959eb7628aa7c9"
48984968
integrity sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==
@@ -5178,6 +5248,14 @@ realpath-native@^1.1.0:
51785248
dependencies:
51795249
util.promisify "^1.0.0"
51805250

5251+
redent@^3.0.0:
5252+
version "3.0.0"
5253+
resolved "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f"
5254+
integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==
5255+
dependencies:
5256+
indent-string "^4.0.0"
5257+
strip-indent "^3.0.0"
5258+
51815259
regenerate-unicode-properties@^8.0.2:
51825260
version "8.1.0"
51835261
resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e"
@@ -5695,7 +5773,7 @@ source-list-map@^2.0.0:
56955773
resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34"
56965774
integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==
56975775

5698-
source-map-resolve@^0.5.0:
5776+
source-map-resolve@^0.5.0, source-map-resolve@^0.5.2:
56995777
version "0.5.2"
57005778
resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259"
57015779
integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==
@@ -5914,6 +5992,13 @@ strip-eof@^1.0.0:
59145992
resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
59155993
integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=
59165994

5995+
strip-indent@^3.0.0:
5996+
version "3.0.0"
5997+
resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001"
5998+
integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==
5999+
dependencies:
6000+
min-indent "^1.0.0"
6001+
59176002
strip-json-comments@~2.0.1:
59186003
version "2.0.1"
59196004
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"

0 commit comments

Comments
 (0)