diff --git a/pwa/package-lock.json b/pwa/package-lock.json index ac055d9..a54cc8f 100644 --- a/pwa/package-lock.json +++ b/pwa/package-lock.json @@ -1436,6 +1436,16 @@ "@types/testing-library__react": "^9.1.2" } }, + "@testing-library/react-hooks": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@testing-library/react-hooks/-/react-hooks-3.2.1.tgz", + "integrity": "sha512-1OB6Ksvlk6BCJA1xpj8/WWz0XVd1qRcgqdaFAq+xeC6l61Ucj0P6QpA5u+Db/x9gU4DCX8ziR5b66Mlfg0M2RA==", + "dev": true, + "requires": { + "@babel/runtime": "^7.5.4", + "@types/testing-library__react-hooks": "^3.0.0" + } + }, "@testing-library/user-event": { "version": "7.2.1", "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-7.2.1.tgz", @@ -1580,6 +1590,15 @@ "@types/react": "*" } }, + "@types/react-test-renderer": { + "version": "16.9.2", + "resolved": "https://registry.npmjs.org/@types/react-test-renderer/-/react-test-renderer-16.9.2.tgz", + "integrity": "sha512-4eJr1JFLIAlWhzDkBCkhrOIWOvOxcCAfQh+jiKg7l/nNZcCIL2MHl2dZhogIFKyHzedVWHaVP1Yydq/Ruu4agw==", + "dev": true, + "requires": { + "@types/react": "*" + } + }, "@types/stack-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", @@ -1602,6 +1621,16 @@ "@types/testing-library__dom": "*" } }, + "@types/testing-library__react-hooks": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@types/testing-library__react-hooks/-/testing-library__react-hooks-3.2.0.tgz", + "integrity": "sha512-dE8iMTuR5lzB+MqnxlzORlXzXyCL0EKfzH0w/lau20OpkHD37EaWjZDz0iNG8b71iEtxT4XKGmSKAGVEqk46mw==", + "dev": true, + "requires": { + "@types/react": "*", + "@types/react-test-renderer": "*" + } + }, "@types/yargs": { "version": "13.0.8", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.8.tgz", @@ -11283,6 +11312,30 @@ "workbox-webpack-plugin": "4.3.1" } }, + "react-test-renderer": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.13.1.tgz", + "integrity": "sha512-Sn2VRyOK2YJJldOqoh8Tn/lWQ+ZiKhyZTPtaO0Q6yNj+QDbmRkVFap6pZPy3YQk8DScRDfyqm/KxKYP9gCMRiQ==", + "dev": true, + "requires": { + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "react-is": "^16.8.6", + "scheduler": "^0.19.1" + }, + "dependencies": { + "scheduler": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", + "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", + "dev": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + } + } + }, "react-tween-state": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/react-tween-state/-/react-tween-state-0.1.5.tgz", diff --git a/pwa/package.json b/pwa/package.json index 2d3404c..8fb239a 100644 --- a/pwa/package.json +++ b/pwa/package.json @@ -21,6 +21,7 @@ "start": "react-scripts start", "build": "react-scripts build", "test": "react-scripts test", + "coverage": "react-scripts test --coverage --watchAll=false", "eject": "react-scripts eject" }, "eslintConfig": { @@ -37,5 +38,9 @@ "last 1 firefox version", "last 1 safari version" ] + }, + "devDependencies": { + "@testing-library/react-hooks": "^3.2.1", + "react-test-renderer": "^16.13.1" } } diff --git a/pwa/src/hooks/useApi.test.tsx b/pwa/src/hooks/useApi.test.tsx new file mode 100644 index 0000000..42286bf --- /dev/null +++ b/pwa/src/hooks/useApi.test.tsx @@ -0,0 +1,16 @@ +import { renderHook } from '@testing-library/react-hooks' +import useApi from './useApi' + +test('should return loading and then a response', async () => { + const { result, waitForNextUpdate } = renderHook(() => useApi("")) + + expect(result.current.response).toBeNull() + expect(result.current.error).toBeNull() + expect(result.current.isLoading).toBeTruthy() + + await waitForNextUpdate() + + expect(result.current.response).toBeTruthy() + expect(result.current.error).toBeNull() + expect(result.current.isLoading).toBeFalsy() +}) \ No newline at end of file diff --git a/pwa/src/hooks/useApi.tsx b/pwa/src/hooks/useApi.tsx index 4036246..8c2c697 100644 --- a/pwa/src/hooks/useApi.tsx +++ b/pwa/src/hooks/useApi.tsx @@ -1,7 +1,6 @@ import React from 'react' - -const useFetch = (route: string) => { +const useApi = (route: string) => { const [response, setResponse] = React.useState(null); const [error, setError] = React.useState(null); const [isLoading, setIsLoading] = React.useState(false); @@ -23,4 +22,4 @@ const useFetch = (route: string) => { return { response, error, isLoading }; }; -export default useFetch \ No newline at end of file +export default useApi \ No newline at end of file diff --git a/pwa/src/index.tsx b/pwa/src/index.tsx index 6a3c468..8284dd9 100644 --- a/pwa/src/index.tsx +++ b/pwa/src/index.tsx @@ -1,3 +1,4 @@ +/* istanbul ignore file */ import React from 'react'; import ReactDOM from 'react-dom'; import './scss/index.scss'; diff --git a/pwa/src/serviceWorker.ts b/pwa/src/serviceWorker.ts index d5f0275..4592733 100644 --- a/pwa/src/serviceWorker.ts +++ b/pwa/src/serviceWorker.ts @@ -1,3 +1,4 @@ +/* istanbul ignore file */ // This optional code is used to register a service worker. // register() is not called by default.