Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

160
Vistas
No se puede simular una función dentro de useEffect

Tengo un gancho personalizado como se muestra a continuación.

 export const useUserSearch = () => { const [options, setOptions] = useState([]); const [searchString, setSearchString] = useState(""); const [userSearch] = useUserSearchMutation(); useEffect(() => { if (searchString.trim().length > 3) { const searchParams = { orgId: "1", userId: "1", searchQuery: searchString.trim(), }; userSearch(searchParams) .then((data) => { setOptions(data); }) .catch((err) => { setOptions([]); console.log("error", err); }); } }, [searchString, userSearch]); return { options, setSearchString, }; };

y quiero probar este enlace pero no puedo simular la función de búsqueda de usuario que se llama dentro de userSearch . ¿Alguien puede ayudar? esta es mi prueba

 it('should set state and test function', async () => { const wrapper = ({ children }) => ( <Provider store={store}>{children}</Provider> ) const { result } = renderHook( () => useUserSearch(), { wrapper } ) await act(async () => { result.current.setSearchString('abc5') }) expect(result.current.options).toEqual(expected) })

useUserSearchMutation

 import {createApi, fetchBaseQuery} from '@reduxjs/toolkit/query/react'; export const userSearchAPI = createApi({ reducerPath: 'userSearchResult', baseQuery: fetchBaseQuery({baseUrl: process.env.REACT_APP_BASE_URL}), tagTypes: ['Users'], endpoints: build => ({ userSearch: build.mutation({ query: body => ({url: '/org/patient/search', method: 'POST', body}), invalidatesTags: ['Users'], }), }), }); export const {useUserSearchMutation} = userSearchAPI;
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Debido a que es una exportación con nombre, debe devolver un objeto en el simulacro

 it("should set state and test function", async () => { jest.mock("./useUserSearchMutation", () => ({ useUserSearchMutation: () => [jest.fn().mockResolvedValue(expected)], })); const wrapper = ({ children }) => ( ... });
about 4 years ago · Juan Pablo Isaza Denunciar

0

He creado un ejemplo más pequeño basado en su código, donde me burlo de un gancho dentro de otro gancho.

ganchos/useUserSearch.js

 import { useEffect, useState } from "react"; import useUserSearchMutation from "./useUserSearchMutation.js"; const useUserSearch = () => { const [text, setText] = useState(); const userSearch = useUserSearchMutation(); useEffect(() => { const newText = userSearch(); setText(newText); }, [userSearch]); return text; }; export default useUserSearch;

ganchos/useUSerSearchMutation.js

Tuve que mover esto a su propio archivo para poder burlarme de él cuando se llamó dentro del otro gancho.

 const useUserSearchMutation = () => { return () => "Im not mocked"; }; export default useUserSearchMutation;

Aplicación.prueba.js

 import { render } from "react-dom"; import useUserSearch from "./hooks/useUserSearch"; import * as useUserSearchMutation from "./hooks/useUserSearchMutation"; import { act } from "react-dom/test-utils"; let container; beforeEach(() => { // set up a DOM element as a render target container = document.createElement("div"); document.body.appendChild(container); }); afterEach(() => { // cleanup on exiting document.body.removeChild(container); container = null; }); function TestComponent() { const text = useUserSearch(); return <div>{text}</div>; } test("should mock userSearch", async () => { const mockValue = "Im being mocked"; jest .spyOn(useUserSearchMutation, "default") .mockImplementation(() => () => mockValue); act(() => { render(<TestComponent />, container); }); expect(container.textContent).toBe(mockValue); });
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda