2. Introduction to BDD
Introduction to Cucumber
Stories and Cucumber features
Building Cucumber Scenarios and Steps
Tools
Slicing Cucumber
Cucumber Catalyst
4. “I believe that the hardest part of software projects, the
most common source of project failure, is
communication with the customers and users of that
software.
By providing a clear yet precise language to deal with
domains, a DSL can help improve this
communication.”
Martin Fowler
5. To meet requirement
To guarantee quality
verify confidence Design Behaviour
19. Scenario: search by director
Given the store has movies directed by “Steven
Spielberg”
When I search for “Steven Spielberg”
Then I should see all of the movies directed by “Steven
Spielberg”
20. Meet Advanced Gherkin –TABLE
Scenario: search by director
Given the following movies are in stock:
| Title | Director | Year |
| Jaws | Steven Spielberg | 1975 |
| Star Wars | George Lucas | 1975 |
| Dawn of the Dead | George Romero | 1978 |
| E.T. | Steven Spielberg | 1982 |
When I search for "Spielberg" under "Director"
Then I should see the following table:
| Title | Director | Year |
| Jaws | Steven Spielberg | 1975 |
| E.T. | Steven Spielberg | 1982 |
21. Meet Advanced Gherkin –Multi-Line String
Scenario: register successfully
Given I am on on the registration page
When I sign up as "Jojo Binks"
Then I should receive the following email:
"""
Thanks for signing up Jojo!
Important information about here.
"""
22. Meet Advanced Gherkin –Scenario Outlines
Scenario Outline: search by director
Given the following movies are in stock:
| Title | Director | Year |
| Jaws | Steven Spielberg | 1975 |
| Star Wars | George Lucas | 1975 |
| Dawn of the Dead | George Romero | 1978 |
| E.T. | Steven Spielberg | 1982 |
When I search for "<Director Query>" under "Director"
Then I the search results should be "<Search Results>"
Examples:
| Director Query | Search Results |
| Steve | E.T., Jaws |
| George | Dawn of the Dead, Star Wars |
| Lucas | Star Wars |
23. Building step definition (Example)
Scenario: Create a new company
Given I am logged in
When I create a new company named Acme
Then I should see that a company named Acme exists
24. Building step definition – Given
Given == Setup
Given "I am logged in" do
user = Factory(:user)
visits new_session_path
fills_in ‘Login’, :with => user.login
fills_in ‘Password’, :with => user.password
clicks_button ‘Login’
end
25. Building step definition – When
When == Change
When "I create a new company named $name" do
|name|
visits new_company_path
fills_in 'Name', :with => name
clicks_button 'Create'
end
26. Building step definition – Then
Then == Outcome
Then "I should see that a company named $name exists"
do |name|
response.body.should =~ Regexp.new(name)
end
27. Hooks – Before and After
Generic hooks or hooks by tags
Background
28. Adpating rspec DSL for validation
DOESN’T adpate rspec mock module
Use factory_girl instead
29. factory_girl: load data into database for test
Given "I am logged in" do
user = Factory(:user)
visits new_session_path
fills_in ‘Login’, :with => user.login
fills_in ‘Password’, :with =>
user.password
clicks_button ‘Login’
end Factory.sequence(:email) {|n| "user#{n}@example.com" }
Factory.define :user do |user|
user.name 'User'
user.email { Factory.next(:email) }
user.login {|u| u.email }
user.password 'password'
user.password_confirmation 'password'
end
30. Simulating or drive Browsers
Feature on Javascript test
Flexibility on switching drivers to achieve different test
demand
Flexibility on switching between css and xpath selector
Covering most of the popular browser driving
Remote calling (for IE test on VM)
31. Highlight keywords in Gherkin
Autocomplete by hotkey
Run by hotkey and present visual report
32. A DRb server for testing frameworks (RSpec /
Cucumber currently) that forks before each run to
ensure a clean testing state.
37. Building step abstraction from steps
Tagging
Tagging for focused testing
Tagging for categorizing test by purpose and environs
Tagging for loading capybara configuration
38. Slow builds are the enemy of continuous integration
Reuse – Spork, Cucover
Run Just Enough Tests
Slicing Features with tags
Just enough Database and try NullDB
Distributed testing - hydra
39. The Rspec Book
http://www.slideshare.net/josephwilk/rocket-fuelled-
cucumbers
http://www.slideshare.net/bkeepers/behavior-driven-
development-with-cucumber-presentation
http://www.slideshare.net/josephwilk/cucumbered
http://www.slideshare.net/bmabey/cucumber-
automating-the-requirements-language-you-already-
speak