Giter Site home page Giter Site logo

rspec-example_steps's Introduction

RSpec example steps

Given/When/Then/And/But steps for RSpec examples

Description

This gem brings two major functionality to your spec/features

  • Verbosity for rspec documentation formatter.
  • Ability to comment or describe set of actions in example into some step.

Installation

  • For rspec v2 use gem v0.2.x or rspec2 branch
  • For rspec v3 use gem v3.x.x or master branch
gem 'rspec-example_steps'

Add to spec/spec_helper.rb

require 'rspec/example_steps'

Example

spec/features/search_spec.rb

context 'Searching' do
  Steps 'Result found' do
    Given 'I am on search page' do
      visit '/search'
      expect(page).to have_content('Search')
    end

    When 'I search something' do
      fill_in 'Search', with: 'John'
      click_button 'Go'
    end

    Then 'I should see result' do
      expect(page).to have_content('Result')
    end
  end
end

Documentation formatting output:

rspec -fd spec/features/search_spec.rb

Searching
  User succesfully replaces device
    Given I am on search page
    When I search something
    Then I should see result

Shared steps

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.

Example with shared steps

shared_steps 'login' do
  When 'I go to login page' do
    visit '/login'
  end
  When 'I put credentials' do
    fill_in 'Login', with: '[email protected]'
    fill_in 'Password', with: 'password'
  end
  Then 'I should be logged in' do
    expect(page).to have_content('Welcome [email protected]')
  end
end

shared_steps 'logout' do
  visit '/logout'
  expect(page.status_code).to eq(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

Passing arguments to shared steps

It's possible to customize shared steps. See example

Example with shared steps with arguments

shared_steps 'login' do |email, password|
  When 'I go to login page' do
    page.visit '/login'
  end
  When 'I put credentials' do
    fill_in 'Login', with: email
    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', '[email protected]', 'bla'
  include_steps 'invalid login'
end

Pending steps

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

Authors

License

Alternatives

rspec-example_steps's People

Contributors

ayanko avatar amishyn avatar le0pard avatar jraines avatar

Stargazers

 avatar Roman avatar

Watchers

James Cloos avatar Rafael Carrascal Reyes avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.