Best JavaScript code snippet using testing-library-react-hooks
cleanup.test.ts
Source:cleanup.test.ts
...11 cleanupCalled = true12 }13 })14 }15 renderHook(() => useHookWithCleanup())16 await cleanup()17 expect(cleanupCalled).toBe(true)18 })19 test('should cleanup all rendered hooks', async () => {20 const cleanupCalled: boolean[] = []21 const useHookWithCleanup = (id: number) => {22 useEffect(() => {23 return () => {24 cleanupCalled[id] = true25 }26 })27 }28 renderHook(() => useHookWithCleanup(1))29 renderHook(() => useHookWithCleanup(2))30 await cleanup()31 expect(cleanupCalled[1]).toBe(true)32 expect(cleanupCalled[2]).toBe(true)33 })34 test('should call cleanups in reverse order', async () => {35 const callSequence: string[] = []36 addCleanup(() => {37 callSequence.push('cleanup')38 })39 addCleanup(() => {40 callSequence.push('another cleanup')41 })42 const useHookWithCleanup = () => {43 useEffect(() => {44 return () => {45 callSequence.push('unmount')46 }47 })48 }49 renderHook(() => useHookWithCleanup())50 await cleanup()51 expect(callSequence).toEqual(['unmount', 'another cleanup', 'cleanup'])52 })53 test('should wait for async cleanup', async () => {54 const callSequence: string[] = []55 addCleanup(() => {56 callSequence.push('cleanup')57 })58 addCleanup(async () => {59 await new Promise((resolve) => setTimeout(resolve, 10))60 callSequence.push('another cleanup')61 })62 const useHookWithCleanup = () => {63 useEffect(() => {64 return () => {65 callSequence.push('unmount')66 }67 })68 }69 renderHook(() => useHookWithCleanup())70 await cleanup()71 expect(callSequence).toEqual(['unmount', 'another cleanup', 'cleanup'])72 })73 test('should remove cleanup using removeCleanup', async () => {74 const callSequence: string[] = []75 addCleanup(() => {76 callSequence.push('cleanup')77 })78 const anotherCleanup = () => {79 callSequence.push('another cleanup')80 }81 addCleanup(anotherCleanup)82 const useHookWithCleanup = () => {83 useEffect(() => {84 return () => {85 callSequence.push('unmount')86 }87 })88 }89 renderHook(() => useHookWithCleanup())90 removeCleanup(anotherCleanup)91 await cleanup()92 expect(callSequence).toEqual(['unmount', 'cleanup'])93 })94 test('should remove cleanup using returned handler', async () => {95 const callSequence: string[] = []96 addCleanup(() => {97 callSequence.push('cleanup')98 })99 const remove = addCleanup(() => {100 callSequence.push('another cleanup')101 })102 const useHookWithCleanup = () => {103 useEffect(() => {104 return () => {105 callSequence.push('unmount')106 }107 })108 }109 renderHook(() => useHookWithCleanup())110 remove()111 await cleanup()112 expect(callSequence).toEqual(['unmount', 'cleanup'])113 })114 }115 )116 runForRenderers(['server/pure'], ({ renderHook, cleanup }) => {117 test('should only cleanup hydrated hooks', async () => {118 const cleanups: Record<string, boolean> = {119 ssr: false,120 hydrated: false121 }122 const useHookWithCleanup = (name: string) => {123 useEffect(() => {124 return () => {125 cleanups[name] = true126 }127 })128 }129 renderHook(() => useHookWithCleanup('ssr'))130 const { hydrate } = renderHook(() => useHookWithCleanup('hydrated'))131 hydrate()132 await cleanup()133 expect(cleanups.ssr).toBe(false)134 expect(cleanups.hydrated).toBe(true)135 })136 })...
autoCleanup.test.ts
Source:autoCleanup.test.ts
...12 cleanupCalled = true13 }14 })15 }16 renderHook(() => useHookWithCleanup())17 })18 test('second', () => {19 expect(cleanupCalled).toBe(true)20 })21 })22 runForRenderers(['server'], ({ renderHook }) => {23 const cleanups: Record<string, boolean> = {24 ssr: false,25 hydrated: false26 }27 test('first (with hydration)', () => {28 const useHookWithCleanup = (name: string) => {29 useEffect(() => {30 return () => {31 cleanups[name] = true32 }33 })34 }35 renderHook(() => useHookWithCleanup('ssr'))36 const { hydrate } = renderHook(() => useHookWithCleanup('hydrated'))37 hydrate()38 })39 test('second (with hydration)', () => {40 expect(cleanups.ssr).toBe(false)41 expect(cleanups.hydrated).toBe(true)42 })43 })...
autoCleanup.pure.test.ts
Source:autoCleanup.pure.test.ts
...13 cleanupCalled = true14 }15 })16 }17 renderHook(() => useHookWithCleanup())18 })19 test('second', () => {20 expect(cleanupCalled).toBe(false)21 })22 }23 )...
Using AI Code Generation
1import { renderHook, act } from '@testing-library/react-hooks';2import { useCounter } from '../useCounter';3describe('useCounter', () => {4 it('should increment counter', () => {5 const { result } = renderHook(() => useCounter());6 act(() => {7 result.current.increment();8 });9 expect(result.current.count).toBe(1);10 });11 it('should decrement counter', () => {12 const { result } = renderHook(() => useCounter());13 act(() => {14 result.current.decrement();15 });16 expect(result.current.count).toBe(-1);17 });18 it('should reset counter', () => {19 const { result } = renderHook(() => useCounter());20 act(() => {21 result.current.reset();22 });23 expect(result.current.count).toBe(0);24 });25});26import { useState } from 'react';27export const useCounter = () => {28 const [count, setCount] = useState(0);29 const increment = () => {30 setCount((count) => count + 1);31 };32 const decrement = () => {33 setCount((count) => count - 1);34 };35 const reset = () => {36 setCount(0);37 };38 return { count, increment, decrement, reset };39};40import React from 'react';41import { useCounter } from './useCounter';42function App() {43 const { count, increment, decrement, reset } = useCounter();44 return (45 <button onClick={increment}>Increment</button>46 <button onClick={decrement}>Decrement</button>47 <button onClick={reset}>Reset</button>48 <div>Count: {count}</div>49 );50}51export default App;
Using AI Code Generation
1import { useHookWithCleanup } from '@testing-library/react-hooks';2import { cleanup } from '@testing-library/react-hooks';3import { act } from '@testing-library/react-hooks';4import { renderHook } from '@testing-library/react-hooks';5import { renderHook } from '@testing-library/react-hooks';6import { renderHook } from '@testing-library/react-hooks';7import { renderHook } from '@testing-library/react-hooks';8import { useHookWithCleanup } from '@testing-library/react-hooks';9import { cleanup } from '@testing-library/react-hooks';10import { act } from '@testing-library/react-hooks';11import { renderHook } from '@testing-library/react-hooks';12import { renderHook } from '@testing-library/react-hooks';13import { renderHook } from '@testing-library/react-hooks';14import { renderHook } from '@testing-library/react-hooks';15import { useHookWithCleanup } from '@testing-library/react-hooks';16import { cleanup } from '@testing-library/react-hooks';17import { act } from '@testing-library/react-hooks';
Using AI Code Generation
1import { renderHook } from '@testing-library/react-hooks';2import { useTestHook } from './testHook';3describe('useTestHook', () => {4 it('should return a value', () => {5 const { result } = renderHook(() => useTestHook());6 expect(result.current).toBe('test');7 });8});9const hook = renderHook(() => hooks[name](...args), options);10const queryCache = new QueryCache();11const queryClient = new QueryClient();12const { Provider, useQueryClient } = initReactQuery();13const ReactQueryContext = createContext();14const { Provider, Consumer } = context;15const context = createContext();
Using AI Code Generation
1import { renderHook, act } from '@testing-library/react-hooks';2import { useHookWithCleanup } from 'use-hook-with-cleanup';3const { result } = renderHook(() => useHookWithCleanup(() => {4 return () => {5 }6}));7act(() => {8});9import { renderHook, act } from '@testing-library/react-hooks';10import { useHookWithCleanup } from 'use-hook-with-cleanup';11const { result } = renderHook(() => useHookWithCleanup(() => {12 return () => {13 }14}));15act(() => {16});17import { renderHook, act } from '@testing-library/react-hooks';18import { useHookWithCleanup } from 'use-hook-with-cleanup';19const { result } = renderHook(() => useHookWithCleanup(() => {20 return () => {21 }22}));23act(() => {24});25import { renderHook, act } from '@testing-library/react-hooks';26import { useHookWithCleanup } from 'use-hook-with-cleanup';27const { result } = renderHook(() => useHookWithCleanup(() => {28 return () => {29 }30}));31act(() => {32});33import { renderHook, act } from '@testing-library/react-hooks';34import { useHookWithCleanup } from 'use-hook-with-cleanup';35const { result } = renderHook(() => useHookWithCleanup(() => {36 return () => {37 }38}));39act(() => {40});
Using AI Code Generation
1import { renderHook, act } from '@testing-library/react-hooks';2import useCounter from './useCounter';3describe('useCounter', () => {4 it('should increment the counter', () => {5 const { result } = renderHook(() => useCounter());6 act(() => {7 result.current.increment();8 });9 expect(result.current.count).toBe(1);10 });11});12import { useState, useEffect } from 'react';13const useCounter = () => {14 const [count, setCount] = useState(0);15 const increment = () => setCount(count + 1);16 useEffect(() => {17 console.log('useEffect called');18 return () => console.log('useEffect cleanup');19 }, []);20 return { count, increment };21};22export default useCounter;23import { renderHook, act } from '@testing-library/react-hooks';24import useCounter from './useCounter';25describe('useCounter', () => {26 it('should increment the counter', () => {27 const { result } = renderHook(() => useCounter());28 act(() => {29 result.current.increment();30 });31 expect(result.current.count).toBe(1);32 });33});34import { useState, useEffect } from 'react';35const useCounter = () => {36 const [count, setCount] = useState(0);37 const increment = () => setCount(count + 1);38 useEffect(() => {39 console.log('useEffect called');40 return () => console.log('useEffect cleanup');41 }, []);42 return { count, increment };43};44export default useCounter;45 √ should increment the counter (6ms)46 √ should increment the counter (5ms)
Using AI Code Generation
1import { renderHook, act } from "@testing-library/react-hooks";2import useFetch from "./useFetch";3test("should fetch data", async () => {4 const { result, waitForNextUpdate } = renderHook(() =>5 );6 expect(result.current.loading).toBeTruthy();7 expect(result.current.data).toBeNull();8 expect(result.current.error).toBeNull();9 await waitForNextUpdate();10 expect(result.current.loading).toBeFalsy();11 expect(result.current.data.length).toBe(100);12 expect(result.current.error).toBeNull();13});14import { useState, useEffect, useCallback } from "react";15export default function useFetch(url) {16 const [loading, setLoading] = useState(true);17 const [data, setData] = useState([]);18 const [error, setError] = useState("");19 const fetchData = useCallback(async () => {20 try {21 const response = await fetch(url);22 const data = await response.json();23 setData(data);24 setLoading(false);25 } catch (err) {26 setError(err.message);27 setLoading(false);28 }29 }, [url]);30 useEffect(() => {31 fetchData();32 }, [fetchData]);33 return { loading, data, error };34}35import { renderHook, act } from "@testing-library/react-hooks";36import useFetch from "./useFetch";37test("should fetch data", async () => {38 const { result, waitForNextUpdate } = renderHook(() =>39 );40 expect(result.current.loading).toBeTruthy();41 expect(result.current.data).toBeNull();42 expect(result.current.error).toBeNull();43 await waitForNextUpdate();44 expect(result.current.loading).toBeFalsy();45 expect(result.current.data.length).toBe(100);46 expect(result.current.error).toBeNull();47});48import { useState, useEffect, useCallback } from "react";49export default function useFetch(url) {50 const [loading, setLoading] = useState(true);51 const [data, setData] = useState([]);52 const [error, setError] = useState("");53 const fetchData = useCallback(async () => {54 try {55 const response = await fetch(url);56 const data = await response.json();57 setData(data);58 setLoading(false);59 } catch (
Using AI Code Generation
1import { renderHook, act } from '@testing-library/react-hooks';2import useWindowWidth from '../src/useWindowWidth';3const resizeWindow = (width) => {4 window.innerWidth = width;5 window.dispatchEvent(new Event('resize'));6};7describe('useWindowWidth', () => {8 it('should return the window width', () => {9 const { result } = renderHook(() => useWindowWidth());10 expect(result.current).toBe(window.innerWidth);11 });12 it('should update the window width when the window is resized', () => {13 const { result } = renderHook(() => useWindowWidth());14 act(() => {15 resizeWindow(600);16 });17 expect(result.current).toBe(600);18 });19});20import { renderHook, act } from '@testing-library/react-hooks';21import useWindowWidth from '../src/useWindowWidth';22const resizeWindow = (width) => {23 window.innerWidth = width;24 window.dispatchEvent(new Event('resize'));25};26describe('useWindowWidth', () => {27 it('should return the window width', () => {28 const { result } = renderHook(() => useWindowWidth());29 expect(result.current).toBe(window.innerWidth);30 });31 it('should update the window width when the window is resized', () => {32 const { result } = renderHook(() => useWindowWidth());33 act(() => {34 resizeWindow(600);35 });36 expect(result.current).toBe(600);37 });38});39import { renderHook, act } from '@testing-library/react-hooks';40import
Using AI Code Generation
1import { renderHook, act } from '@testing-library/react-hooks';2import { useCountdown } from './useCountdown';3describe('useCountdown', () => {4 it('should call the callback when the timer runs out', () => {5 jest.useFakeTimers();6 const callback = jest.fn();7 const { result } = renderHook(() => useCountdown(10, callback));8 expect(result.current.timeLeft).toBe(10);9 act(() => {10 jest.advanceTimersByTime(10000);11 });12 expect(callback).toHaveBeenCalledTimes(1);13 });14 it('should call the callback when the timer runs out', () => {15 jest.useFakeTimers();16 const callback = jest.fn();17 const { result } = renderHook(() => useCountdown(10, callback));18 expect(result.current.timeLeft).toBe(10);19 act(() => {20 jest.advanceTimersByTime(5000);21 });22 expect(result.current.timeLeft).toBe(5);23 });24});25import { useState, useEffect } from 'react';26export const useCountdown = (time, callback) => {27 const [timeLeft, setTimeLeft] = useState(time);28 useEffect(() => {29 const timer = setTimeout(() => {30 setTimeLeft(timeLeft - 1);31 }, 1000);32 if (timeLeft === 0) {33 callback();34 }35 return () => clearTimeout(timer);36 }, [timeLeft, callback]);37 return {38 };39};40import React from 'react';41import { useCountdown } from './useCountdown';42const App = () => {43 const { timeLeft } = useCountdown(10, () => {44 alert('Time is up!');45 });46 return (47 <h1>Time left: {timeLeft}</h1>48 );49};50export default App;
Using AI Code Generation
1import React from 'react';2import { renderHook, act } from '@testing-library/react-hooks'3import useHover from './useHover';4it('should call the callback when the element is hovered', () => {5 const callback = jest.fn();6 const { result } = renderHook(() => useHover(callback));7 expect(callback).not.toHaveBeenCalled();8 act(() => {9 result.current[1].onMouseEnter();10 });11 expect(callback).toHaveBeenCalled();12});13it('should call the callback when the element is unhovered', () => {14 const callback = jest.fn();15 const { result } = renderHook(() => useHover(callback));16 expect(callback).not.toHaveBeenCalled();17 act(() => {18 result.current[1].onMouseLeave();19 });20 expect(callback).toHaveBeenCalled();21});22it('should call the callback with the correct value when the element is hovered', () => {23 const callback = jest.fn();24 const { result } = renderHook(() => useHover(callback));25 expect(callback).not.toHaveBeenCalled();26 act(() => {27 result.current[1].onMouseEnter();28 });29 expect(callback).toHaveBeenCalledWith(true);30});31it('should call the callback with the correct value when the element is unhovered', () => {32 const callback = jest.fn();33 const { result } = renderHook(() => useHover(callback));34 expect(callback).not.toHaveBeenCalled();35 act(() => {36 result.current[1].onMouseLeave();37 });38 expect(callback).toHaveBeenCalledWith(false);39});40import React from 'react';41import { renderHook, act } from '@testing-library/react-hooks'42import useHover from './useHover';43it('should call the callback when the element is hovered', () => {44 const callback = jest.fn();45 const { result } = renderHook(() => useHover(callback));46 expect(callback).not.toHaveBeenCalled();47 act(() => {48 result.current[1].onMouseEnter();49 });50 expect(callback).toHaveBeenCalled();51});52it('should call the callback when the element is unhovered', () => {53 const callback = jest.fn();54 const { result } = renderHook(() => useHover(callback));55 expect(callback).not.toHaveBeenCalled
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!