Construir componentes de interfaz de usuario (UI) consistentes y escalables es crucial en el desarrollo web moderno. Storybook es una herramienta que permite a los desarrolladores aislar, desarrollar, probar y documentar componentes de UI en un entorno aislado (sandboxed).
Storybook te permite:
✅ Desarrollar componentes de forma aislada sin necesidad de ejecutar la aplicación completa.
✅ Crear una librería de componentes para mantener la consistencia del diseño.
✅ Probar y documentar el comportamiento de la UI de forma interactiva.
✅ Integrar con frameworks como React, Vue, Angular y más.
En esta guía completa, cubriremos los siguientes temas..
Storybook es una herramienta de código abierto para construir componentes de UI de forma aislada.
Proporciona un entorno dedicado para probar y documentar componentes sin necesidad de ejecutar la aplicación completa.
| Característica | Storybook |
|---|---|
| Desarrollar componentes de forma aislada | ✅ Sí |
| Previsualización interactiva de componentes | ✅ Sí |
| Generación de documentación integrada | ✅ Sí |
| Soporte para múltiples frameworks | ✅ Sí |
| Integración con Jest, Testing Library, Playwright | ✅ Sí |
Storybook se puede instalar en un proyecto nuevo o existente.
Ejecuta el siguiente comando en el directorio de tu proyecto:
npx storybook@latest init
Este comando:
.storybook con archivos de configuración.npm run storybook
Storybook se abrirá en http://localhost:6006/.
Una «historia» representa un estado de un componente de UI. Define cómo debe aparecer el componente en diferentes escenarios.
Crea un archivo Button.stories.js dentro de src/components/Button/:
import React from 'react';
import Button from './Button';
export default {
title: 'Componentes/Button',
component: Button,
};
export const Primario = () => <Button label="Botón Primario" />;
export const Secundario = () => <Button label="Botón Secundario" variant="secondary" />;
export representa un estado diferente del componente.title define la categoría en Storybook.component vincula el componente de UI a la historia.Los «Controles» de Storybook permiten a los desarrolladores modificar las props (propiedades) dinámicamente en la UI.
Modifica Button.stories.js:
export const Playground = (args) => <Button {...args} />;
Playground.args = {
label: 'Botón Dinámico',
variant: 'primary',
};
Ahora, Storybook proporcionará un panel en la UI donde los desarrolladores pueden cambiar label y variant dinámicamente.
Los «Add-ons» de Storybook extienden su funcionalidad.
| Add-on | Propósito |
|---|---|
@storybook/addon-controls | Ajustar props dinámicamente |
@storybook/addon-docs | Generar documentación |
@storybook/addon-a11y | Pruebas de accesibilidad |
@storybook/testing-library | Pruebas de interacción de la UI |
Ejemplo: Instalando el Add-on de Accesibilidad
npm install @storybook/addon-a11y --save-dev
Modifica .storybook/main.js para registrar el add-on:
module.exports = {
addons: ['@storybook/addon-a11y'],
};
Un proyecto de Storybook bien estructurado mejora el mantenimiento.
src
┣ components
┃ ┣ Button
┃ ┃ ┣ Button.js
┃ ┃ ┣ Button.stories.js
┃ ┃ ┣ Button.test.js
┣ .storybook
┃ ┣ main.js # Configuraciones
┃ ┣ preview.js # Decoradores globales
.storybook/main.js gestiona las configuraciones y los add-ons.Asegurar que tus componentes de UI sean accesibles es crucial para la usabilidad. Storybook se integra con herramientas de prueba de accesibilidad para detectar automáticamente posibles problemas.
npm install --save-dev @storybook/addon-a11y
Modifica .storybook/main.js:
module.exports = {
addons: ['@storybook/addon-a11y'],
};
Cuando la UI de Storybook se carga, un nuevo panel de «Accesibilidad» aparece, mostrando cualquier problema detectado.
Las Pruebas de Regresión Visual detectan cambios en la UI comparando componentes renderizados antes y después de las actualizaciones. Esto asegura que las modificaciones en la UI no introduzcan cambios de diseño no intencionados.
npm install --save-dev @storybook/addon-visual-tests
Modifica Button.stories.js:
import { within, userEvent } from '@storybook/testing-library';
export const VisualTest = () => <Button label="Haz clic" />;
VisualTest.play = async ({ canvasElement }) => {
const canvas = within(canvasElement);
const button = canvas.getByRole('button');
await userEvent.click(button);
};
npx storybook test
Storybook puede simular peticiones a la API para probar el comportamiento de la UI sin depender de un backend.
Instala Mock Service Worker (MSW):
npm install msw --save-dev
Crea mocks.js:
import { setupWorker, rest } from 'msw';
export const worker = setupWorker(
rest.get('/api/user', (req, res, ctx) => {
return res(ctx.json({ name: 'Usuario Mock' }));
})
);
Inicia el servidor mock en preview.js:
import { worker } from '../mocks';
worker.start();
Storybook se puede usar con Playwright para realizar pruebas end-to-end (E2E) para componentes de UI.
npm install --save-dev @playwright/test
Crea un archivo Button.spec.js:
const { test, expect } = require('@playwright/test');
test('Verificar si el componente Botón se renderiza', async ({ page }) => {
await page.goto('http://localhost:6006/?path=/story/components-button--primario');
const button = await page.locator('button');
await expect(button).toHaveText('Botón Primario');
});
npx playwright test
Storybook se integra con Jest, Testing Library y Playwright para pruebas de UI.
Instala las dependencias:
npm install @testing-library/react jest --save-dev
Crea Button.test.js:
import { render, screen } from '@testing-library/react';
import Button from './Button';
test('renderiza el botón', () => {
render(<Button label="Haz clic" />);
expect(screen.getByText('Haz clic')).toBeInTheDocument();
});
npm test.Storybook se puede desplegar como un sitio de documentación de componentes.
npm run build-storybook
Esto crea una carpeta storybook-static/.
npx storybook-to-ghpages
Integrar Storybook en pipelines de CI/CD asegura la consistencia de la UI en todo el desarrollo.
Crea .github/workflows/storybook.yml:
name: Storybook CI
on: push
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v2
- name: Install Dependencies
run: npm install
- name: Build Storybook
run: npm run build-storybook
- name: Deploy Storybook
run: npx storybook-to-ghpages
✅ Usa los Add-ons de Controles y Docs para la interacción dinámica con los componentes.
✅ Organiza los componentes por categoría (Componentes/Button vs Componentes/Inputs).
✅ Automatiza las pruebas visuales y de snapshot para detectar cambios no intencionados.
✅ Despliega Storybook como documentación en vivo para desarrolladores y diseñadores.
✅ Integra Storybook en CI/CD para asegurar la consistencia de la UI.
Storybook es una herramienta poderosa para el desarrollo, prueba y documentación de interfaces de usuario. Mejora la reutilización, la consistencia y la colaboración entre equipos.
La biografía más vendida del cofundador de Apple, Steve Jobs; escrita por uno de los…
Hubo un tiempo en el que la “seguridad en el hogar” significaba confiar en un…
Elon Musk vuelve a romper todos los esquemas. Los accionistas de Tesla acaban de aprobar…
Los fans de Grand Theft Auto tendrán que esperar un poco más para volver a…
Five Nights at Freddy’s: Into the Pit nos sumerge en un misterioso mundo donde lo…
Adéntrate en el oscuro y retorcido mundo de Bendy and the Ink Machine, donde los…