This document provides an overview of Cucumber, a behavior-driven development tool. It describes Cucumber's red-green-refactor workflow, terminology like features and scenarios, and how to set up Cucumber with directories, step definitions, and profiles. It also discusses related tools like Webrat, Machinist, and Pickle that integrate with Cucumber.
4. The Cucumber Way
1. Describe behaviour in plain text
2. Write a step definition in Ruby
3. Run and watch it fail
4. Write code to make the step pass
5. Run again and see the step pass
6. Repeat 2-5 until green like a cuke
7. Repeat 1-6 until the money runs out
5. Cucumber Terminology
• Features
• In order to business value,
• As a role,
• I want to feature
• Scenarios
• Given, When, Then
• Step Definitions
6. Cucumber Setup
• features directory
• plain text .feature files
• step_definitions folder
• ruby steps files
• support folder
9. The AMC Way
• Use Cucumber with:
• Webrat (built-in support)
• Machinist (fixture replacement)
• Ian White’s Pickle (extends Cucumber)
• Profiles
• Tags
• Scenario Outlines
• Background
10. Webrat
• browser simulator
• used by Cucumber by default
• common action step definitions predefined
using webrat (webrat_steps.rb):
When I press “Log in”
Then I should see “Login
successful”
12. Pickle (for objects)
• Uses Machinist, Factory Girl or ActiveRecord
• Provides step definitions for your
convenience (pickle_steps.rb):
Given a user exists
Given a user exists with name:
“Bob”
13. Pickle (for paths)
• Extends paths.rb:
When I go to the users page
When I go to the user’s
articles page
14. Pickle (for email)
• Provides step definitions for your
convenience (email_steps.rb):
Given all emails have been
delivered
Then 1 email should be
delivered to “bob@uncle.com”
15. No New Steps Required
Scenario: delivering comment notification to one user
Given a question exists
And a user exists with name: “Bob”, email:
“uncle@bob.com”
When I go to the question's page
When I fill in "comment[body]" with "My comment"
And I check “Bob”
And I press "Add Comment"
Then 1 email should be delivered to
“uncle@bob.com”
And I should see “Comment notification was sent”
17. Default Profile
• uses transactional fixtures (wraps each
scenario in a database transaction)
• uses webrat
• excludes sphinx and selenium features
18. Sphinx Profile
• for testing features that use thinking-sphinx
• won’t work with transactional fixtures
• use database cleaner gem instead
• uses webrat
• specifies only sphinx features
19. Selenium Profile
• useful for testing javascript features
• won’t work with transactional fixtures
• use database cleaner gem instead
• uses selenium webrat configuration
• drives a real browser
• specifies only selenium features
21. Cucumber Tags
• used to target features and scenarios
• used by profiles:
cucumber -t sphinx
• use @wip for feature or scenario that you
are currently working on:
cucumber -t wip
22. Cucumber Tags
• Add directly above
Feature or Scenario
keywords
• Can have more than one
(comma separated)