ruby testing tools
Post on 19-May-2015
2.537 Views
Preview:
DESCRIPTION
TRANSCRIPT
Rails testing tools
Agile - the Rails Way
Testing
•Test::Unit•Shoulda•webrat•RSpec•Cucumber
The base tool used for testing in Rails
Makes tests easier on the eyes & fingersExpressive acceptance test libraryBehavior driven testing frameworkPlain text based BDD testing tool
An example featureFeature: Find love In order to find love I want to search the internet
Scenario: looking (in all the wrong places) Given I have opened "http://www.google.com/" When I search for "love" Then I should see a link to "http://zombieharmony.com/" -> with text "Yes, even you can find love!"
The feature nameFeature: Find love In order to find love I want to search the internet
Scenario: looking (in all the wrong places) Given I have opened "http://www.google.com/" When I search for "love" Then I should see a link to "http://zombieharmony.com/" -> with text "Yes, even you can find love!"
The feature definitionFeature: Find love In order to find love I want to search the internet
Scenario: Searching for JS.Class docs Given I have opened "http://www.google.com/" When I search for "love" Then I should see a link to "http://zombieharmony.com/" -> with text "Yes, even you can find love!"
An example scenarioFeature: Find love In order to find love I want to search the internet
Scenario: looking (in all the wrong places) Given I have opened "http://www.google.com/" When I search for "love" Then I should see a link to "http://zombieharmony.com/" -> with text "Yes, even you can find love!"
The scenario nameFeature: Find love In order to find love I want to search the internet
Scenario: looking (in all the wrong places) Given I have opened "http://www.google.com/" When I search for "love" Then I should see a link to "http://zombieharmony.com/" -> with text "Yes, even you can find love!"
Given . . .Feature: Find love In order to find love I want to search the internet
Scenario: looking (in all the wrong places) Given I have opened "http://www.google.com/" When I search for "love" Then I should see a link to "http://zombieharmony.com/" -> with text "Yes, even you can find love!"
When . . .Feature: Fidn love In order to find love I want to search the internet
Scenario: looking (in all the wrong places) Given I have opened "http://www.google.com/" When I search for "love" Then I should see a link to "http://zombieharmony.com/" -> with text "Yes, even you can find love!"
Then . . .Feature: Find love In order to find love I want to search the internet
Scenario: looking (in all the wrong places) Given I have opened "http://www.google.com/" When I search for "love" Then I should see a link to "http://zombieharmony.com/" -> with text "Yes, even you can find love!"
The step definitionsGiven /^I have opened "([^\"]*)"$/ do |url| visit urlend
When /^I search for "([^\"]*)"$/ do |query| fill_in 'q', :with => query click_button 'Google Search'end
Then /^I should see a link to "([^\"]*)" with text "([^\"]*)"$/ do |url, text| response_body.should have_selector("a[href='#{ url }']") do |element| element.should contain(text) endend
Given definitionGiven /^I have opened "([^\"]*)"$/ do |url| visit urlend
When /^I search for "([^\"]*)"$/ do |query| fill_in 'q', :with => query click_button 'Google Search'end
Then /^I should see a link to "([^\"]*)" with text "([^\"]*)"$/ do |url, text| response_body.should have_selector("a[href='#{ url }']") do |element| element.should contain(text) endend
When definitionGiven /^I have opened "([^\"]*)"$/ do |url| visit urlend
When /^I search for "([^\"]*)"$/ do |query| fill_in 'q', :with => query click_button 'Google Search'end
Then /^I should see a link to "([^\"]*)" with text "([^\"]*)"$/ do |url, text| response_body.should have_selector("a[href='#{ url }']") do |element| element.should contain(text) endend
Then definitionGiven /^I have opened "([^\"]*)"$/ do |url| visit urlend
When /^I search for "([^\"]*)"$/ do |query| fill_in 'q', :with => query click_button 'Google Search'end
Then /^I should see a link to "([^\"]*)" with text "([^\"]*)"$/ do |url, text| response_body.should have_selector("a[href='#{ url }']") do |element| element.should contain(text) endend
CucumberGiven /^I have opened "([^\"]*)"$/ do |url| visit urlend
When /^I search for "([^\"]*)"$/ do |query| fill_in 'q', :with => query click_button 'Google Search'end
Then /^I should see a link to "([^\"]*)" with text "([^\"]*)"$/ do |url, text| response_body.should have_selector("a[href='#{ url }']") do |element| element.should contain(text) endend
webratGiven /^I have opened "([^\"]*)"$/ do |url| visit urlend
When /^I search for "([^\"]*)"$/ do |query| fill_in 'q', :with => query click_button 'Google Search'end
Then /^I should see a link to "([^\"]*)" with text "([^\"]*)"$/ do |url, text| response_body.should have_selector("a[href='#{ url }']") do |element| element.should contain(text) endend
RSpecGiven /^I have opened "([^\"]*)"$/ do |url| visit urlend
When /^I search for "([^\"]*)"$/ do |query| fill_in 'q', :with => query click_button 'Google Search'end
Then /^I should see a link to "([^\"]*)" with text "([^\"]*)"$/ do |url, text| response_body.should have_selector("a[href='#{ url }']") do |element| element.should contain(text) endend
Controller testdescribe LoveController do
it { should route(:get, 'search').to(:action => :find) }
describe 'lookin for love' do before { get :find, :q => 'someone to hold me - ever so gently' } it { should respond_with 404 } it { should respond_with_content_type 'text/html' } end
end
RSpecdescribe LoveController do
it { should route(:get, 'search').to(:action => :find) }
describe 'lookin for love' do before { get :find, :q => 'someone to hold me - ever so gently' } it { should respond_with 404 } it { should respond_with_content_type 'text/html' } end
end
Shouldadescribe LoveController do
it { should route(:get, 'search').to(:action => :find) }
describe 'lookin for love' do before { get :find, :q => 'someone to hold me - ever so gently' } it { should respond_with 404 } it { should respond_with_content_type 'text/html' } end
end
When to use whatFor user acceptance (view) testing:
•Cucumber•webrat•RSpec
For functional (controller) testing:•Rspec•Shoulda•Factory Girl (not covered here)
For unit (model) testing:•Shoulda•Test::Unit
Pimp my projectPimp my data:
•Factory Girl•Mocha•Fixtures
Pimp my code:•Autotest (part of ZenTest)•RCov (code coverage tool)•metric_fu (if ninjas created reports)
Comparing Java & RubyRuby
Community driven Surgical tools Duck typing Wild west 15 years old
JavaCommittee driven Swiss Army Knife
Static typing JCP
14 years old
top related