Capybara: Ruby Integration & Acceptance Testing Guide
Capybara ist ein Ruby Acceptance-Testing-Framework — treibt einen echten Browser via Selenium/Cuprite. Mit RSpec/Minitest für End-to-End-Rails-Tests.
Was ist Capybara?
Capybara ist eine Ruby Acceptance- und Integration-Testing-Library, die simuliert, wie ein echter User mit einer Web-Anwendung interagiert. Es bietet ein High-Level-DSL zum Visiten von Seiten, Ausfüllen von Forms, Klicken von Links und Asserten von gerendertem Content. Capybara ist der de-facto Standard für End-to-End-Testing im Ruby/Rails-Ökosystem.
Capybara ist ein Test-Driver, kein Test-Framework — es funktioniert mit RSpec, Minitest oder Cucumber. Es unterstützt mehrere Browser-Driver: rack-test, Selenium, Cuprite.
Warum Capybara?
- Liest sich wie Englisch.
- Driver-agnostisch.
- Smart Waiting.
- Rails-Integration.
- Mature Ökosystem.
Basic Capybara-Test (mit 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
endHäufige Capybara-DSL-Methoden
| Aktion | Methode |
|---|---|
| Navigieren | visit '/path' |
| Link/Button klicken | click_link 'text' |
| Form-Field ausfüllen | fill_in 'Label', with: 'value' |
| Dropdown auswählen | select 'Option', from: 'Label' |
| Checkbox checken | check 'Label' |
| Radio wählen | choose 'Label' |
| Datei attachen | attach_file 'Label', '/path/file.png' |
| Element finden | find('.selector') |
| Content asserten | expect(page).to have_content('text') |
| Within scope | within('.sidebar') { ... } |
Capybara-Driver verglichen
| Driver | Echter Browser? | Geschwindigkeit | JS-Support? |
|---|---|---|---|
| rack-test | Nein | Schnellste | Nein |
| Selenium | Ja | Langsam | Voll |
| Cuprite | Ja (Chrome via CDP) | Medium | Voll |
Empfohlen: rack-test für non-JS-Tests, Cuprite für JS-Tests.
Capybara konfigurieren
require 'capybara/rails'
require 'capybara/rspec'
Capybara.default_driver = :rack_test
Capybara.javascript_driver = :cuprite
Capybara.default_max_wait_time = 5Capybara Best Practices
- Semantische Selektoren nutzen.
- Auto-Wait nicht disablen.
- Assertions scopen.
- Database-Cleanup.
- Headless in CI.
- Screenshots on Failure.
- Page Objects.
- Internals nicht testen.
Häufige Fallstricke
- Flaky Tests.
- Geteilter State.
- JS lädt nicht.
- Selenium hängt in CI.
- Verschiedenes Verhalten in Dev vs CI.
- Echten Browser nicht testen.
Capybara vs andere Tools
| Tool | Sprache | Ansatz |
|---|---|---|
| Capybara | Ruby | DSL auf Selenium/CDP-Drivers |
| Cypress | JS | Full Test-Runner |
| Playwright | JS/Python/Java/.NET | Cross-Browser via CDP |
| Selenium WebDriver | Multi-Language | Lower-Level |
| Watir | Ruby | Selenium-Wrapper |
FAQ: Capybara
Wird Capybara noch maintained?
Ja. Aktive Entwicklung; weit genutzt in Rails-Community.
Sollte ich Capybara oder Cypress nutzen?
Capybara wenn Ruby/Rails. Cypress wenn JS-only-Stack.
Was ist der beste Driver für JS-Tests?
Cuprite. Schneller + zuverlässiger als Selenium ChromeDriver.
Wie teste ich JavaScript-driven UIs?
Specs mit js: true taggen.
Warum sind meine Capybara-Tests flaky?
Meist Race-Conditions oder geteilter State.
Kann Capybara headless laufen?
Ja — Cuprite läuft headless by default.
Wie teste ich File-Uploads?
attach_file 'File', Rails.root.join('spec/fixtures/test.png').
Load-Testen Sie Ihre Capybara-getestete App mit LoadFocus
Capybara-Tests verifizieren Verhalten; Load-Tests verifizieren Scale. LoadFocus läuft JMeter- und k6-Scripts gegen Ihre Rails-App aus 25+ Regionen mit bis zu 12.500 VUs. Registrieren bei loadfocus.com/signup.
Verwandte LoadFocus-Tools
Setze dieses Konzept mit LoadFocus in die Praxis um — derselben Plattform, die alles antreibt, was du gerade gelesen hast.