View Testing
Learn about the assert_select method and view testing in Rails.
We'll cover the following
View testing involves checking the presence or absence of certain key HTML elements used in your views and the contents of these HTML elements.
The assertions made for view testing are done through assert_select
.
The tests for views reside in test/controllers/
and are written in the file for the associated controller.
The tests for the app/views/links
will be written in the test/controllers/links_controller_test.rb
file.
The assert_select
method
Before you can process with writing tests for your views, you will have to learn a new assertion: assert_select
.
The assert_select
method provides you with ways to query HTML elements in your tests.
assert_select 'title'
The assertion above will look for the <title>
HTML element in view.
The method selects elements and allows you to perform one or more equality tests, such as:
-
true
: Assertion is true if at least one element is selected/found.true
is the default second argument.-
assert_select 'title', true
- If the
<title>
elements exists on the view, this assertion will be true.
-
-
false
: Assertion is true if no matching elements are found.-
assert_select 'title', false
- If a
<title>
element is found, this assertion will be false. It expects for there to be no<title>
elements on the current view.
-
-
integer
: Assertion is true if the number of elements found are equal to theinteger
value.-
assert_select 'h2', 4
- This assertion will be true if exactly
4
<h2>
elements are found on the view.
-
-
string/regex
: Assertion is true if at least one element has the text provided as thestring/regex
.-
assert_select 'title', "RailsApp"
- This assertion will be true if the text in the
<title>
element isRailsApp
.
-
assert_select
can also be used in a nested manner. In this case, the inner assert_select
receives all the elements selected by the outer assert_select
as an array. This array can be iterated over.
Writing view tests
You will be writing a few simple tests for the views associated with your Links
controller.
Tests for index view
Let’s write a test to check whether your index
view contains an <h1>
tag and whether this <h1>
tag has the content Links
.
In test/controllers/links_controller_test.rb
you will create a new test:
Get hands-on with 1400+ tech skills courses.