Skip to content

Instantly share code, notes, and snippets.

@them0nk
Created March 23, 2012 03:39
Show Gist options
  • Save them0nk/2166525 to your computer and use it in GitHub Desktop.
Save them0nk/2166525 to your computer and use it in GitHub Desktop.
Rspec Rails cheatsheet (include capybara matchers)
#Model
@user.should have(1).error_on(:username) # Checks whether there is an error in username
@user.errors[:username].should include("can't be blank") # check for the error message
#Rendering
response.should render_template(:index)
#Redirecting
response.should redirect_to(movies_path)
#Capybara Matchers
response.body.should have_content("Hello world")
response.body.should have_no_content("Hello world")
response.body.should have_css("input#movie_title")
response.body.should have_css("input#movie_title", :value => "Twelve Angry Men")
response.body.should have_css("input", :count => 3) #True if there are 3 input tags in response
response.body.should have_css("input", :maximum => 3) # True if there or fewer or equal to 3 input tags
response.body.should have_css("input", :minimum => 3) # True if there are minimum of 3 input tags
response.body.should have_css("input", :between => 1..3) # True if there 1 to 3 input tags
response.body.should have_css("p a", :text => "hello") # True if there is a anchor tag with text hello
response.body.should have_css("p a", :text => /[hH]ello(.+)/i)
# True if there is a anchor tag with text matching regex
response.body.should have_xpath("//a")
response.body.should have_xpath("//a",:href => "google.com")
response.body.should have_xpath("//a[@href => 'google.com']")
response.body.should have_xpath("//a[contains(.,'some string')]")
response.body.should have_xpath("//p//a", :text => /re[dab]i/i, :count => 1)
# can take both xpath and css as input and can take arguments similar to both have_css and have_xpath
response.body.should have_selector(:xpath, "//p/h1")
response.body.should have_selector(:css, "p a#movie_edit_path")
# For making capybara to take css as default selector
Capybara.default_selector = :css
response.body.should have_selector("input") #checks for the presence of the input tag
response.body.should have_selector("input", :value =>"Twelve Angry Men") # checks for input tag with value
response.body.should have_no_selector("input")
# For making capybara to take css as default selector
Capybara.default_selector = :xpath
response.body.should have_selector("//input") #checks for the presence of the input tag
response.body.should have_selector("//input", :value =>"Twelve Angry Men") # checks for input tag with value
# To access elements inside form
response.body.should have_field("FirstName") # checks for presence of a input field named FirstName in a form
response.body.should have_field("FirstName", :value => "Rambo")
response.body.should have_field("FirstName", :with => "Rambo")
response.body.should have_link("Foo")
response.body.should have_link("Foo", :href=>"googl.com")
response.body.should have_no_link("Foo", :href=>"google.com")
@danieljohnmorris
Copy link

This works but using page.should instead of response.body.should

@AlexanderFisenko
Copy link

You'd better use the new :expect syntax like expect(page).to have_

@bunnymatic
Copy link

With capybara 2.4.4, if you want to find a field with a value, use the following

  expect(page).to have_field("My Field", with: "the value in the field")

@kirbyfern
Copy link

Hey I just started learning RSpec is there a tutorial while using these awesome cheatsheets?

@togiberlin
Copy link

Hi, this Gist is outdated - it still uses the "should" syntax.
In newer versions of Capybara, it was replaced by the "expect" syntax.

@redrick
Copy link

redrick commented Aug 14, 2017

Hey, so with expect syntax and couple things that work different, hopefully helpful :)

https://gist.github.com/redrick/01a0ca575a99f264f1d8ab6a4c93cff0

(I was working from nerdinand fork)

@brookjordan
Copy link

Line 44 should be:
# To pass xpath as the default selector type

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment