Safari Books Online is a digital library providing on-demand subscription access to thousands of learning resources.
Integration testing is the most complicated testing Rails supports directly. It tests complete requests coming in from the outside, running through routing, controllers, models, the database, and even views. Rails does not generate any integration tests by default, as creating them requires detailed knowledge of the complete application and what it is supposed to do. Integration tests are stored in tests/integration and look much like the classes for other kinds of tests. They call similar methods and also make assertions, but the assertions are different and the flow can cover multiple interactions, as Example 12-15 demonstrates.
Code View:
Scroll
/
Show All require 'test_helper'
# Integration tests covering the manipulation of student objects
class StudentsTest < ActionController::IntegrationTest
def test_adding_a_student
# get the new student form
get '/students/new' # could be new_students_path
# check there are boxes to put the name in
# trivial in our case, but illustrates how to check output HTML
assert_select "input[type=text][name='student[given_name]']"
assert_select "input[type=text][name='student[family_name]']"
assert_difference('Student.count') do
post '/students/create', :student => {
:given_name => "Fred",
:family_name => "Smith",
:date_of_birth => "1999-09-01",
:grade_point_average => 2.0,
:start_date => "2008-09-01"
}
end
assert_redirected_to "/students/#{assigns(:student).id}"
follow_redirect!
# for completeness, check it's showing some of our data
assert_select "p", /Fred/
assert_select "p", /2008\-09\-01/
end
end
|