Este método es similar a renderToNodeStream
, pero está pensado para entornos que soporten Web Streams como Deno
.
Un ejemplo de uso sería el siguiente:
const controller = new AbortController()
const { signal } = controller
let didError = false
try {
const stream = await renderToReadableStream(
<html>
<body>Success</body>
</html>,
{
signal,
onError(error) {
didError = true
console.error(error)
}
}
)
// Si quieres enviar todo el HTML en vez de hacer streaming, puedes usar esta línea
// Es útil para crawlers o generación estática:
// await stream.allReady
return new Response(stream, {
status: didError ? 500 : 200,
headers: {'Content-Type': 'text/html'},
})
} catch (error) {
return new Response(
'<!doctype html><p>Loading...</p><script src="clientrender.js"></script>',
{
status: 500,
headers: {'Content-Type': 'text/html'},
}
)
}
Para hacer testing de un componente, puedes usar la función render
de la librería @testing-library/react
. Esta función nos permite renderizar un componente y obtener el resultado.
import { render } from '@testing-library/react'
function Counter() {
const [count, setCount] = useState(0)
const increment = () => setCount(count + 1)
return (
<div>
<p>Count: {count}</p>
<button onClick={increment}>Increment</button>
</div>
)
}
test('Counter', () => {
const { getByText } = render(<Counter />)
expect(getByText('Count: 0')).toBeInTheDocument()
fireEvent.click(getByText('Increment'))
expect(getByText('Count: 1')).toBeInTheDocument()
})
Para hacer testing de un hook, puedes usar la función renderHook
de la librería @testing-library/react-hooks
. Esta función nos permite renderizar un hook y obtener el resultado.
import { renderHook } from '@testing-library/react-hooks'
function useCounter() {
const [count, setCount] = useState(0)
const increment = () => setCount(count + 1)
return { count, increment }
}
test('useCounter', () => {
const { result } = renderHook(() => useCounter())
expect(result.current.count).toBe(0)
act(() => {
result.current.increment()
})
expect(result.current.count).toBe(1)
})