SlideShare ist ein Scribd-Unternehmen logo
1 von 14
10/1/2015
Getting Started with
RSpec…Capybara and whatnot
Lightning Talk hosted by The Firehose Project
Myo Thant Kyaw
What exactly is RSpec?
Behavioral Driven Development
(TDD + Domain Driven Design + Acceptance Test-Driven Planning)
RSpec
Given some context -> When some event occurs -> Then I expect some outcome
DHH’s dislike about RSpec
https://twitter.com/dhh/status/472072157821169664
http://brandonhilkert.com/blog/7-reasons-why-im-sticking-with-minitest-and-fixture
Basic Structure (Syntax)
Given some context -> When some event occurs -> Then I expect some o
Structure:
Given
RSpec.describe StaticPagesController, :type => :controller do
describe "GET index" do
it "renders the index template" do
get :index
expect(response).to render_template("index")
end
end
end
When
Then
WhenGiven Then
RSpec with Ruby
#1: $ gem install rspec
#2: Inside project folder: $ rspec —init
and set up like this
#3: spec/spec_helper.rb >
require_relative '../car'
#4: spec/car_spec.rb >
require 'spec_helper'
describe Car do
before(:each) do
@car = Car.new("Make", "Model", :type)
end
describe "#honk" do
it "returns the correct sound" do
expect(@car.honk).to eq("Ponk ponk")
end
end
#5: $ rspec spec/car_spec.rb -fd
Some RSpec Matchers
✤ expect(@car.make).to eq(“Honda”)
✤ expect(@car.make).to match(/H.n.a/)
✤ expect(@visible).to be(true)
✤ expect(@numbers).to match_array([4,5,2,8])
✤ expect(alphabet).to start_with("a")
✤ expect(alphabet).to end_with(“z")
✤ expect(alphabet).to start_with("a").and end_with(“z")
✤ expect(stoplight.color).to eq("red").or eq("green").or eq(“yellow")
✤ http://rspec.info/blog/2014/01/new-in-rspec-3-composable-matchers/
✤ RSpec Cheatsheet: http://www.anchor.com.au/wp-content/uploads/rspec_cheatsheet_attributed.pdf
RSpec with Rails - 1
Gemfile >
group :development, :test do
gem 'rspec-rails', '~> 3.0'
gem 'factory_girl_rails'
end
group :test do
gem 'faker'
gem 'capybara'
gem 'guard-rspec'
gem 'selenium-webdriver', '~> 2.47.1'
end
$ bundle install
RSpec with Rails - 2
$ rails g rspec:install
Delete > test folder
spec/rails_helper.rb >
require 'capybara/rspec'
Install spec files for existing controllers and models >
$ rails g rspec:controller StaticPagesController
$ rails g rspec:model Course
(RSpec generates spec files automatically upon rails g controller/model)
RSpec with Rails - Controller Test
# controllers/selfies_controller.rb
require 'rails_helper'
RSpec.describe StaticPagesController, :type => :controller do
describe "GET index" do
it "renders the index template" do
get :index
expect(response).to render_template("index")
end
end
describe "GET about" do
it "renders the about page" do
get :about
expect(response).to render_template("about")
end
end
end
Controller Test
RSpec with Rails - Model Test
# spec/models/selfy_spec.rb
require 'rails_helper'
RSpec.describe Selfy, :type => :model do
describe "selfy" do
selfy = FactoryGirl.build(:selfy)
it "has a valid factory title" do
expect(selfy.title).to eq("This is test selfy title")
end
it "has a valid factory description" do
expect(selfy.description).to eq("This is test selfy description")
end
end
Model Test
RSpec with Rails
Feature Test with Capybara -1
# spec/features/user_visits_homepage_spec.rb
require "rails_helper"
RSpec.feature "User visits homepage", :type => :feature do
scenario "successfully", :js => true do
visit root_path
expect(page).to have_text("Welcome to Selfie There")
end
end
Capybara
Selenium JS Web Driver
Feature Test
Capybara Cheatsheet:
https://learn.thoughtbot.com/test-driven-rails-resources/capybara.pdf
(OPTIONAL)
RSpec with Rails
Feature Test with Capybara -2
# spec/features/user_signs_in_spec.rb
require "rails_helper"
RSpec.feature "User signs in", :type => :feature do
scenario "successfully", :js => true do
user = FactoryGirl.build(:user)
visit "/users/sign_in"
fill_in "Email", :with => user.email
fill_in "Password", :with => user.password
click_button "Log in"
expect(page).to have_text("Signed in successfully.")
end
end
Feature Test
Tips and tricks
Know the difference between FactoryGirl.create() and FactoryGirl.build()
If your test says something like email exists
=> $ rake db:test:prepare
Know how fixtures work and maybe use database_cleaner gem to avoid pos
Use guard gem to run automated testing
=> $ guard init and leave the tab open like you are running rails server
some .rspec options
.rspec >
—color
—format documentation
Thank You!!!
Myo Thant Kyaw

Weitere ähnliche Inhalte

Ähnlich wie Rspec presentation

Rspec and Capybara Intro Tutorial at RailsConf 2013
Rspec and Capybara Intro Tutorial at RailsConf 2013Rspec and Capybara Intro Tutorial at RailsConf 2013
Rspec and Capybara Intro Tutorial at RailsConf 2013Brian Sam-Bodden
 
RSpec and Rails
RSpec and RailsRSpec and Rails
RSpec and RailsAlan Hecht
 
Spark View Engine (Richmond)
Spark View Engine (Richmond)Spark View Engine (Richmond)
Spark View Engine (Richmond)curtismitchell
 
Ruby on Rails - Introduction
Ruby on Rails - IntroductionRuby on Rails - Introduction
Ruby on Rails - IntroductionVagmi Mudumbai
 
A tour on ruby and friends
A tour on ruby and friendsA tour on ruby and friends
A tour on ruby and friends旻琦 潘
 
Capybara and cucumber with DSL using ruby
Capybara and cucumber with DSL using rubyCapybara and cucumber with DSL using ruby
Capybara and cucumber with DSL using rubyDeepak Chandella
 
Javascript unit testing, yes we can e big
Javascript unit testing, yes we can   e bigJavascript unit testing, yes we can   e big
Javascript unit testing, yes we can e bigAndy Peterson
 
Elasticsearch And Ruby [RuPy2012]
Elasticsearch And Ruby [RuPy2012]Elasticsearch And Ruby [RuPy2012]
Elasticsearch And Ruby [RuPy2012]Karel Minarik
 
Alberto Maria Angelo Paro - Isomorphic programming in Scala and WebDevelopmen...
Alberto Maria Angelo Paro - Isomorphic programming in Scala and WebDevelopmen...Alberto Maria Angelo Paro - Isomorphic programming in Scala and WebDevelopmen...
Alberto Maria Angelo Paro - Isomorphic programming in Scala and WebDevelopmen...Codemotion
 
TDC 2012 - Patterns e Anti-Patterns em Ruby
TDC 2012 - Patterns e Anti-Patterns em RubyTDC 2012 - Patterns e Anti-Patterns em Ruby
TDC 2012 - Patterns e Anti-Patterns em RubyFabio Akita
 
Behavioural Testing Ruby/Rails Apps @ Scale - Rspec & Cucumber
       Behavioural Testing Ruby/Rails Apps @ Scale - Rspec & Cucumber       Behavioural Testing Ruby/Rails Apps @ Scale - Rspec & Cucumber
Behavioural Testing Ruby/Rails Apps @ Scale - Rspec & CucumberUdaya Kiran
 
RSpec 3.0: Under the Covers
RSpec 3.0: Under the CoversRSpec 3.0: Under the Covers
RSpec 3.0: Under the CoversBrian Gesiak
 
Crossing the Bridge: Connecting Rails and your Front-end Framework
Crossing the Bridge: Connecting Rails and your Front-end FrameworkCrossing the Bridge: Connecting Rails and your Front-end Framework
Crossing the Bridge: Connecting Rails and your Front-end FrameworkDaniel Spector
 
Ruby on Rails survival guide of an aged Java developer
Ruby on Rails survival guide of an aged Java developerRuby on Rails survival guide of an aged Java developer
Ruby on Rails survival guide of an aged Java developergicappa
 
SCR Annotations for Fun and Profit
SCR Annotations for Fun and ProfitSCR Annotations for Fun and Profit
SCR Annotations for Fun and ProfitMike Pfaff
 

Ähnlich wie Rspec presentation (20)

Rspec and Capybara Intro Tutorial at RailsConf 2013
Rspec and Capybara Intro Tutorial at RailsConf 2013Rspec and Capybara Intro Tutorial at RailsConf 2013
Rspec and Capybara Intro Tutorial at RailsConf 2013
 
RSpec and Rails
RSpec and RailsRSpec and Rails
RSpec and Rails
 
Rspec
RspecRspec
Rspec
 
Spark View Engine (Richmond)
Spark View Engine (Richmond)Spark View Engine (Richmond)
Spark View Engine (Richmond)
 
Ruby on Rails - Introduction
Ruby on Rails - IntroductionRuby on Rails - Introduction
Ruby on Rails - Introduction
 
A tour on ruby and friends
A tour on ruby and friendsA tour on ruby and friends
A tour on ruby and friends
 
Capybara and cucumber with DSL using ruby
Capybara and cucumber with DSL using rubyCapybara and cucumber with DSL using ruby
Capybara and cucumber with DSL using ruby
 
Javascript unit testing, yes we can e big
Javascript unit testing, yes we can   e bigJavascript unit testing, yes we can   e big
Javascript unit testing, yes we can e big
 
Elasticsearch And Ruby [RuPy2012]
Elasticsearch And Ruby [RuPy2012]Elasticsearch And Ruby [RuPy2012]
Elasticsearch And Ruby [RuPy2012]
 
Basic RSpec 2
Basic RSpec 2Basic RSpec 2
Basic RSpec 2
 
Alberto Maria Angelo Paro - Isomorphic programming in Scala and WebDevelopmen...
Alberto Maria Angelo Paro - Isomorphic programming in Scala and WebDevelopmen...Alberto Maria Angelo Paro - Isomorphic programming in Scala and WebDevelopmen...
Alberto Maria Angelo Paro - Isomorphic programming in Scala and WebDevelopmen...
 
TDC 2012 - Patterns e Anti-Patterns em Ruby
TDC 2012 - Patterns e Anti-Patterns em RubyTDC 2012 - Patterns e Anti-Patterns em Ruby
TDC 2012 - Patterns e Anti-Patterns em Ruby
 
Behavioural Testing Ruby/Rails Apps @ Scale - Rspec & Cucumber
       Behavioural Testing Ruby/Rails Apps @ Scale - Rspec & Cucumber       Behavioural Testing Ruby/Rails Apps @ Scale - Rspec & Cucumber
Behavioural Testing Ruby/Rails Apps @ Scale - Rspec & Cucumber
 
RSpec 3.0: Under the Covers
RSpec 3.0: Under the CoversRSpec 3.0: Under the Covers
RSpec 3.0: Under the Covers
 
RSpec. Part 2
RSpec. Part 2RSpec. Part 2
RSpec. Part 2
 
Crossing the Bridge: Connecting Rails and your Front-end Framework
Crossing the Bridge: Connecting Rails and your Front-end FrameworkCrossing the Bridge: Connecting Rails and your Front-end Framework
Crossing the Bridge: Connecting Rails and your Front-end Framework
 
Create a new project in ROR
Create a new project in RORCreate a new project in ROR
Create a new project in ROR
 
Ruby on Rails survival guide of an aged Java developer
Ruby on Rails survival guide of an aged Java developerRuby on Rails survival guide of an aged Java developer
Ruby on Rails survival guide of an aged Java developer
 
SCR Annotations for Fun and Profit
SCR Annotations for Fun and ProfitSCR Annotations for Fun and Profit
SCR Annotations for Fun and Profit
 
BDD in iOS with Cedar
BDD in iOS with CedarBDD in iOS with Cedar
BDD in iOS with Cedar
 

Kürzlich hochgeladen

HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesBoston Institute of Analytics
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024The Digital Insurer
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 

Kürzlich hochgeladen (20)

HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 

Rspec presentation

  • 1. 10/1/2015 Getting Started with RSpec…Capybara and whatnot Lightning Talk hosted by The Firehose Project Myo Thant Kyaw
  • 2. What exactly is RSpec? Behavioral Driven Development (TDD + Domain Driven Design + Acceptance Test-Driven Planning) RSpec Given some context -> When some event occurs -> Then I expect some outcome DHH’s dislike about RSpec https://twitter.com/dhh/status/472072157821169664 http://brandonhilkert.com/blog/7-reasons-why-im-sticking-with-minitest-and-fixture
  • 3. Basic Structure (Syntax) Given some context -> When some event occurs -> Then I expect some o Structure: Given RSpec.describe StaticPagesController, :type => :controller do describe "GET index" do it "renders the index template" do get :index expect(response).to render_template("index") end end end When Then WhenGiven Then
  • 4. RSpec with Ruby #1: $ gem install rspec #2: Inside project folder: $ rspec —init and set up like this #3: spec/spec_helper.rb > require_relative '../car' #4: spec/car_spec.rb > require 'spec_helper' describe Car do before(:each) do @car = Car.new("Make", "Model", :type) end describe "#honk" do it "returns the correct sound" do expect(@car.honk).to eq("Ponk ponk") end end #5: $ rspec spec/car_spec.rb -fd
  • 5. Some RSpec Matchers ✤ expect(@car.make).to eq(“Honda”) ✤ expect(@car.make).to match(/H.n.a/) ✤ expect(@visible).to be(true) ✤ expect(@numbers).to match_array([4,5,2,8]) ✤ expect(alphabet).to start_with("a") ✤ expect(alphabet).to end_with(“z") ✤ expect(alphabet).to start_with("a").and end_with(“z") ✤ expect(stoplight.color).to eq("red").or eq("green").or eq(“yellow") ✤ http://rspec.info/blog/2014/01/new-in-rspec-3-composable-matchers/ ✤ RSpec Cheatsheet: http://www.anchor.com.au/wp-content/uploads/rspec_cheatsheet_attributed.pdf
  • 6. RSpec with Rails - 1 Gemfile > group :development, :test do gem 'rspec-rails', '~> 3.0' gem 'factory_girl_rails' end group :test do gem 'faker' gem 'capybara' gem 'guard-rspec' gem 'selenium-webdriver', '~> 2.47.1' end $ bundle install
  • 7. RSpec with Rails - 2 $ rails g rspec:install Delete > test folder spec/rails_helper.rb > require 'capybara/rspec' Install spec files for existing controllers and models > $ rails g rspec:controller StaticPagesController $ rails g rspec:model Course (RSpec generates spec files automatically upon rails g controller/model)
  • 8. RSpec with Rails - Controller Test # controllers/selfies_controller.rb require 'rails_helper' RSpec.describe StaticPagesController, :type => :controller do describe "GET index" do it "renders the index template" do get :index expect(response).to render_template("index") end end describe "GET about" do it "renders the about page" do get :about expect(response).to render_template("about") end end end Controller Test
  • 9. RSpec with Rails - Model Test # spec/models/selfy_spec.rb require 'rails_helper' RSpec.describe Selfy, :type => :model do describe "selfy" do selfy = FactoryGirl.build(:selfy) it "has a valid factory title" do expect(selfy.title).to eq("This is test selfy title") end it "has a valid factory description" do expect(selfy.description).to eq("This is test selfy description") end end Model Test
  • 10. RSpec with Rails Feature Test with Capybara -1 # spec/features/user_visits_homepage_spec.rb require "rails_helper" RSpec.feature "User visits homepage", :type => :feature do scenario "successfully", :js => true do visit root_path expect(page).to have_text("Welcome to Selfie There") end end Capybara Selenium JS Web Driver Feature Test Capybara Cheatsheet: https://learn.thoughtbot.com/test-driven-rails-resources/capybara.pdf (OPTIONAL)
  • 11. RSpec with Rails Feature Test with Capybara -2 # spec/features/user_signs_in_spec.rb require "rails_helper" RSpec.feature "User signs in", :type => :feature do scenario "successfully", :js => true do user = FactoryGirl.build(:user) visit "/users/sign_in" fill_in "Email", :with => user.email fill_in "Password", :with => user.password click_button "Log in" expect(page).to have_text("Signed in successfully.") end end Feature Test
  • 12. Tips and tricks Know the difference between FactoryGirl.create() and FactoryGirl.build() If your test says something like email exists => $ rake db:test:prepare Know how fixtures work and maybe use database_cleaner gem to avoid pos Use guard gem to run automated testing => $ guard init and leave the tab open like you are running rails server
  • 13. some .rspec options .rspec > —color —format documentation