diff --git a/_tests_/pages/pokedex.spec.tsx b/_tests_/pages/pokedex.spec.tsx index 2f2847c..dbb2536 100644 --- a/_tests_/pages/pokedex.spec.tsx +++ b/_tests_/pages/pokedex.spec.tsx @@ -3,9 +3,19 @@ import { BrowserRouter } from 'react-router-dom'; import { Pokedex } from '@pages'; import { render, screen } from '@testing-library/react'; +import axios from 'axios'; +import MockAdapter from 'axios-mock-adapter'; describe('', () => { - it('should render the page Pokedex', () => { + it('should render the page Pokedex', async () => { + const mockPokemons = [ + { id: 1, name: 'Pikachu' }, + { id: 2, name: 'Charmander' }, + ]; + + const mock = new MockAdapter(axios); + mock.onGet().reply(200, mockPokemons); + render( <> @@ -13,6 +23,9 @@ describe('', () => { ); + + await screen.findByText('Select your pokemon'); + expect(screen.getByText('Select your pokemon')).toBeInTheDocument(); }); }); diff --git a/package-lock.json b/package-lock.json index 93c2d77..c79bca2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,6 +13,7 @@ "@babel/preset-typescript": "^7.21.5", "@jest/globals": "^29.5.0", "axios": "^1.2.2", + "axios-mock-adapter": "^1.21.4", "phosphor-react": "^1.4.1", "react": "^18.2.0", "react-dom": "^18.2.0", @@ -3824,6 +3825,18 @@ "proxy-from-env": "^1.1.0" } }, + "node_modules/axios-mock-adapter": { + "version": "1.21.4", + "resolved": "https://registry.npmjs.org/axios-mock-adapter/-/axios-mock-adapter-1.21.4.tgz", + "integrity": "sha512-ztnENm28ONAKeRXC/6SUW6pcsaXbThKq93MRDRAA47LYTzrGSDoO/DCr1NHz7jApEl95DrBoGPvZ0r9xtSbjqw==", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "is-buffer": "^2.0.5" + }, + "peerDependencies": { + "axios": ">= 0.17.0" + } + }, "node_modules/axobject-query": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", @@ -5706,7 +5719,6 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true, "license": "MIT" }, "node_modules/fast-diff": { @@ -6600,6 +6612,28 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" + } + }, "node_modules/is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", @@ -13803,6 +13837,15 @@ "proxy-from-env": "^1.1.0" } }, + "axios-mock-adapter": { + "version": "1.21.4", + "resolved": "https://registry.npmjs.org/axios-mock-adapter/-/axios-mock-adapter-1.21.4.tgz", + "integrity": "sha512-ztnENm28ONAKeRXC/6SUW6pcsaXbThKq93MRDRAA47LYTzrGSDoO/DCr1NHz7jApEl95DrBoGPvZ0r9xtSbjqw==", + "requires": { + "fast-deep-equal": "^3.1.3", + "is-buffer": "^2.0.5" + } + }, "axobject-query": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", @@ -15139,8 +15182,7 @@ "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "fast-diff": { "version": "1.2.0", @@ -15744,6 +15786,11 @@ "has-tostringtag": "^1.0.0" } }, + "is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" + }, "is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", diff --git a/package.json b/package.json index fb86bcc..e260e89 100644 --- a/package.json +++ b/package.json @@ -39,6 +39,7 @@ "@babel/preset-typescript": "^7.21.5", "@jest/globals": "^29.5.0", "axios": "^1.2.2", + "axios-mock-adapter": "^1.21.4", "phosphor-react": "^1.4.1", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/src/hooks/_tests_/usePokemons.spec.ts b/src/hooks/_tests_/usePokemons.spec.ts new file mode 100644 index 0000000..42285d0 --- /dev/null +++ b/src/hooks/_tests_/usePokemons.spec.ts @@ -0,0 +1,36 @@ +/* eslint-disable import/extensions */ +import { renderHook, act } from '@testing-library/react'; +import axios from 'axios'; +import MockAdapter from 'axios-mock-adapter'; + +import { useGetPokemonsData } from '../usePokemons'; + +const mock = new MockAdapter(axios); +describe('useGetPokemonsData', () => { + beforeEach(() => { + mock.reset(); // Reseta o mock antes de cada teste + }); + + it('should fetch and set pokemons data', async () => { + const mockPokemons = [ + { id: 1, name: 'Pikachu' }, + { id: 2, name: 'Charmander' }, + // Adicione mais objetos de pokemons mockados, se necessário + ]; + + // mock.onGet(process.env.VITE_URL_API).reply(200, mockPokemons); + const mock = new MockAdapter(axios); + mock.onGet(process.env.VITE_URL_API).reply(200, mockPokemons); + + const { result } = renderHook(() => useGetPokemonsData()); + + expect(result.current.loading).toBe(true); + + await act(async () => { + await result.current.getPokemons(); // Chame a função getPokemons diretamente + }); + + expect(result.current.loading).toBe(false); + expect(mockPokemons).toEqual(mockPokemons); + }); +}); diff --git a/src/hooks/usePokemons.ts b/src/hooks/usePokemons.ts index ca264af..42e4e2e 100644 --- a/src/hooks/usePokemons.ts +++ b/src/hooks/usePokemons.ts @@ -41,5 +41,5 @@ export const useGetPokemonsData = () => { return setPokemons(filteredPokemons); }; - return { pokemons, loading, FilterPokemon }; + return { pokemons, loading, FilterPokemon, getPokemons }; }; diff --git a/yarn.lock b/yarn.lock index df8bc4a..c2f5be2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2097,7 +2097,15 @@ "resolved" "https://registry.npmjs.org/axe-core/-/axe-core-4.6.2.tgz" "version" "4.6.2" -"axios@^1.2.2": +"axios-mock-adapter@^1.21.4": + "integrity" "sha512-ztnENm28ONAKeRXC/6SUW6pcsaXbThKq93MRDRAA47LYTzrGSDoO/DCr1NHz7jApEl95DrBoGPvZ0r9xtSbjqw==" + "resolved" "https://registry.npmjs.org/axios-mock-adapter/-/axios-mock-adapter-1.21.4.tgz" + "version" "1.21.4" + dependencies: + "fast-deep-equal" "^3.1.3" + "is-buffer" "^2.0.5" + +"axios@^1.2.2", "axios@>= 0.17.0": "integrity" "sha512-bz/J4gS2S3I7mpN/YZfGFTqhXTYzRho8Ay38w2otuuDR322KzFIWm/4W2K6gIwvWaws5n+mnb7D1lN9uD+QH6Q==" "resolved" "https://registry.npmjs.org/axios/-/axios-1.2.2.tgz" "version" "1.2.2" @@ -3225,7 +3233,7 @@ "jest-message-util" "^29.5.0" "jest-util" "^29.5.0" -"fast-deep-equal@^3.1.1": +"fast-deep-equal@^3.1.1", "fast-deep-equal@^3.1.3": "integrity" "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" "resolved" "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" "version" "3.1.3" @@ -3761,6 +3769,11 @@ "call-bind" "^1.0.2" "has-tostringtag" "^1.0.0" +"is-buffer@^2.0.5": + "integrity" "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" + "resolved" "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz" + "version" "2.0.5" + "is-callable@^1.1.3", "is-callable@^1.1.4", "is-callable@^1.2.7": "integrity" "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" "resolved" "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz"