Given/When/Then/And/But steps for RSpec examples
require 'rspec/example_steps'
context "Searching" do
Steps "Result found" do
Given "I am on search page" do
page.visit("/search")
page.should have_content("Search")
end
When "I search something" do
page.fill_in('Search', :with => 'John')
page.click_button "Go"
end
Then "I should see result" do
page.should have_content("Result")
end
end
end
Searching
User succesfully replaces device
Given I am on search page
When I search something
Then I should see result
Use shared_steps do define block that will be evaluated in the context of example using include_steps.
Shared steps behavior is simular to shared example but context is example nor example_group.
shared_steps "login" do
When "I go to login page" do
page.visit '/login'
end
When "I put credentials" do
page.fill_in 'Login', :with => 'jack@example.com'
page.fill_in 'Password', :with => 'password''
end
Then "I should be logged in" do
page.status_code.should == 200
page.should have_content("Welcome jack@example.com")
end
end
shared_steps "logout" do
page.visit '/logout'
page.status_code.should == 200
end
context "user flow"
Steps "User updates profile description" do
include_steps "login"
When "I update profile description" do
...
end
include_steps "logout"
end
Steps "User updates profile avatar" do
include_steps "login"
When "I update profile avatar" do
...
end
include_steps "logout"
end
end
It's possible to customize shared steps. See example
shared_steps "login" do |email, password|
When "I go to login page" do
page.visit '/login'
end
When "I put credentials" do
page.fill_in 'Login', :with => email
page.fill_in 'Password', :with => password
end
end
shared_steps "invalid login" do
Then "I should see login error" do
...
end
end
Steps "User provides wrong email" do
include_steps "login", 'jack', 'qwerty'
include_steps "invalid login"
end
Steps "User provides wrong password" do
include_steps "login", 'jack@example.com', 'bla'
include_steps "invalid login"
end
Simular to Example :pending behavior:
Steps "User login" do
# just skip block
When "I go to login"
# pass :pending => true option
Then "I should see welcome", :pending => true do
...
end
# pass :pending => "some pending message"
Then "I should see last login IP", :pending => "WIP" do
...
end
end
- Copyright (c) 2013 Railsware www.railsware.com
- MIT