Wie sieht’s mit Selenium in cucumber und Kumpels aus (webrat kann ja kein JScript/Ajax)?
Dies sind die Schritte zur Aktivierung:
Ein paar gems
gem install selenium-client
gem install bmabey-database_cleaner
Der database-cleaner besorgt im Selenium-Modus das Rollback der Datenbank. Im webrat-Modus tut Rails dies selbst durch stornierte Transaktionen.
Firefox-Binary verlinken
In Ubuntu muss ein SymLink auf das aktuelle Firefox-Binary gesetzt werden:
sudo ln -s /usr/lib/firefox-3.0.8/firefox /usr/bin/firefox-bin
Weil er direkt auf die Binaryversion zeigt, zerbricht er leider bei Updates.
Anpassung der cucumber-Umgebung
Da sicher nicht alle Features Ajax/JScript benötigen, ist es pfiffig, zwei getrennte Umgebungen – plain (nur webrat) und enhanced (mit selenium) – zu definieren. Dazu legt man eine entsprechende cucumber.yml in’s Rails-root(!) und schafft die Filestruktur wie unten angegeben:
cucumber.yml:
1
2
3
4
5
|
default: -r features/support/env.rb -r features/support/plain.rb \
-r features/step_definitions features/plain
selenium: -r features/support/env.rb -r features/support/enhanced.rb \
-r features/step_definitions features/enhanced |
feature-Tree:
features(devel) > tree
.
|-- enhanced
| `-- 533386.feature
|-- plain
| `-- 533386.feature
|-- step_definitions
| |-- session_steps.rb
| `-- webrat_steps.rb
|-- support
| |-- enhanced.rb
| |-- env.rb
| |-- paths.rb
| `-- plain.rb
Hier habe ich zu Testzwecken einfach das gleiche 533386.feature-File für beide Umgebungen benutzt.
Die support/enhanced.rb:
1
2
3
4
5
6
7
8
9
10
11
12
|
require 'spec/expectations'
require 'selenium'
require 'webrat'
Webrat.configure do |config|
config.mode = :selenium
config.application_environment = :test
end
require 'database_cleaner'
require 'database_cleaner/cucumber'
DatabaseCleaner.strategy = :truncation |
Wenn man hier das environment auf “test” setzt, benötigt man keine explizite “selenium”-Railsumgebung mehr.
Die support/env.rb:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
ENV["RAILS_ENV"] = "test"
require File.expand_path(File.dirname(__FILE__) + '/../../config/environment')
require 'cucumber/rails/world'
require 'cucumber/formatters/unicode'
Cucumber::Rails.bypass_rescue
require 'webrat'
Webrat.configure do |config|
config.mode = :rails
end
require 'cucumber/rails/rspec'
require 'webrat/core/matchers'
require 'factory_girl' |
Es wird hier vor allem das “use_transactional_fixtures” der normalen Konfiguration entfernt. Dies kommt in die support/plain.rb:
|
Cucumber::Rails.use_transactional_fixtures |
Aufruf der beiden Modi
Auf geht’s:
cucumber
allein ruft nun die plain-Features mit webrat auf und das Kommando
cucumber -p selenium
entsprechend die enhanced-Features mit Selenium. Ein manuelles Starten des selenium-Dienstes ist nicht vorher notwendig.
Wichtig: wie sich gezeigt hat, ist das benutzte webrat-Plugin (Version pre 0.4.3) noch buggy. Dieser Patch beseitigt ein Problem, bei dem einzelne Tests zufällig mit 0ms-Timeouts abbrachen..
Integration mit pickler/Tracker
Die Integration mit dem Pivotal Tracker via pickler funktioniert auch in den Unterordnern – man ruft die Features jetzt nur mit Pfad auf:
pickler pull features/enhanced/539953.feature
Hurra, sehr cool das!
Weblinks
- cucumber/setting-up-selenium
- webrat/selenium.rb
- http://seleniumhq.org/download/
- groups.google.com/group/webrat
- bmabey/database_cleaner
- examples/selenium_webrat
- http://gist.github.com/83635