Integration Testing

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.

Example 12-15. An integration test that tries adding a student

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, ...

Get Learning Rails: Live Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.