Capybara: Guía Testing Integración & Aceptación Ruby
Capybara es un framework Ruby de acceptance testing — maneja un browser real vía Selenium/Cuprite. Con RSpec/Minitest para tests end-to-end Rails.
¿Qué es Capybara?
Capybara es una librería Ruby de acceptance e integration testing que simula cómo un usuario real interactúa con una aplicación web. Provee un DSL high-level para visitar páginas, llenar forms, hacer click en links y assertar contenido renderizado. Capybara es el estándar de facto para end-to-end testing en el ecosistema Ruby/Rails.
Capybara es un test driver, no un test framework — funciona con RSpec, Minitest o Cucumber. Soporta múltiples browser drivers: rack-test, Selenium, Cuprite.
¿Por qué Capybara?
- Se lee como inglés.
- Driver-agnóstico.
- Smart waiting.
- Integración Rails.
- Ecosistema maduro.
Test Capybara básico (con RSpec)
require 'rails_helper'
RSpec.feature 'User signup', type: :feature do
scenario 'user signs up successfully' do
visit '/signup'
fill_in 'Email', with: 'alice@example.com'
fill_in 'Password', with: 'secret123'
click_button 'Create account'
expect(page).to have_content 'Welcome, alice'
end
endMétodos DSL Capybara comunes
| Acción | Método |
|---|---|
| Navegar | visit '/path' |
| Click link/button | click_link 'text' |
| Llenar campo form | fill_in 'Label', with: 'value' |
| Seleccionar dropdown | select 'Option', from: 'Label' |
| Checkear checkbox | check 'Label' |
| Elegir radio | choose 'Label' |
| Adjuntar archivo | attach_file 'Label', '/path/file.png' |
| Encontrar elemento | find('.selector') |
| Assertar contenido | expect(page).to have_content('text') |
| Within scope | within('.sidebar') { ... } |
Drivers Capybara comparados
| Driver | ¿Browser real? | Velocidad | ¿JS support? |
|---|---|---|---|
| rack-test | No | Más rápido | No |
| Selenium | Sí | Lento | Completo |
| Cuprite | Sí (Chrome vía CDP) | Medio | Completo |
Recomendado: rack-test para tests non-JS, Cuprite para tests JS.
Configurando Capybara
require 'capybara/rails'
require 'capybara/rspec'
Capybara.default_driver = :rack_test
Capybara.javascript_driver = :cuprite
Capybara.default_max_wait_time = 5Mejores prácticas Capybara
- Usar selectores semánticos.
- No disable auto-wait.
- Scope assertions.
- Cleanup base datos.
- Headless en CI.
- Screenshots on failure.
- Page Objects.
- No testear internals.
Pitfalls comunes
- Tests flaky.
- Estado compartido.
- JS no carga.
- Selenium colgándose en CI.
- Comportamiento distinto en dev vs CI.
- No testear browser real.
Capybara vs otras herramientas
| Herramienta | Lenguaje | Approach |
|---|---|---|
| Capybara | Ruby | DSL sobre drivers Selenium/CDP |
| Cypress | JS | Test runner completo |
| Playwright | JS/Python/Java/.NET | Cross-browser vía CDP |
| Selenium WebDriver | Multi-lenguaje | Lower-level |
| Watir | Ruby | Wrapper Selenium |
FAQ: Capybara
¿Sigue siendo mantenido Capybara?
Sí. Desarrollo activo; ampliamente usado en comunidad Rails.
¿Debería usar Capybara o Cypress?
Capybara si Ruby/Rails. Cypress si stack JS-only.
¿Cuál es el mejor driver para tests JS?
Cuprite. Más rápido + confiable que Selenium ChromeDriver.
¿Cómo testeo UIs JavaScript-driven?
Tagear specs con js: true.
¿Por qué mis tests Capybara son flaky?
Usualmente race conditions o estado compartido.
¿Puede Capybara correr headless?
Sí — Cuprite corre headless por default.
¿Cómo testeo file uploads?
attach_file 'File', Rails.root.join('spec/fixtures/test.png').
Load-testea tu app testeada con Capybara con LoadFocus
Tests Capybara verifican comportamiento; load tests verifican escala. LoadFocus corre scripts JMeter y k6 contra tu app Rails desde 25+ regiones con hasta 12.500 VUs. Regístrate en loadfocus.com/signup.
Herramientas LoadFocus relacionadas
Lleva este concepto a la práctica con LoadFocus — la misma plataforma que potencia todo lo que acabas de leer.