Estoy configurando la ubicación de Windows en mi gancho useEffect de la siguiente manera.
const MyComponent = (name) => { React.useEffect(() => { window.location.href = `/${name}/mypath${window.location.search}` }, []); return <Fragment/>; }; Estoy buscando probar que el valor href coincida correctamente.
Por lo tanto, me burlo de los datos de la siguiente manera y espero que el valor coincida con la siguiente cadena.
www.test.com/name/mypath?param=1Pero termino con un error que dice que el valor de window.location.href es en realidad el siguiente.
/[object Object]/mypath?param=1Falta el host y tampoco captura el valor del accesorio de nombre en el href. ¿Podría obtener algún consejo sobre lo que estoy haciendo mal? Gracias.
Mi prueba de la siguiente manera.
jest.spyOn(React, 'useEffect').mockImplementation(f => f()); delete window.location; window = Object.create(window); const host = "www.test.com"; const search = '?param=1' Object.defineProperty(window, "location", { value: { host, search }, writable: true }); describe('My tests', () => { const render = () => shallow( <MyComponent name='name' /> ); it('should pass', () => { const rendered = render(); const url = 'www.test.com/name/mypath?param=1'; expect(window.location.href).toEqual(url); }); });Olvidó desestructurar el argumento de accesorios para su componente,
Debería ser
const MyComponent = ({name}) => { //rest of your code } La razón es que las funciones de componentes reciben solo un argumento, que es un objeto con todos los accesorios que pasó. Lo que hiciste es simplemente llamarlo name . Lo que hice fue desestructurar la propiedad name del objeto props, es decir, tomé el valor que se pasó en el name prop