class ActionDispatch::IntegrationTest
An integration test spans multiple controllers and actions, tying them all together to ensure they work together as expected. It tests more completely than either unit or functional tests do, exercising the entire stack, from the dispatcher to the database.
At its simplest, you simply extend IntegrationTest
and write
your tests using the get/post methods:
require "test_helper" class ExampleTest < ActionDispatch::IntegrationTest fixtures :people def test_login # get the login page get "/login" assert_equal 200, status # post the login and follow through to the home page post "/login", username: people(:jamis).username, password: people(:jamis).password follow_redirect! assert_equal 200, status assert_equal "/home", path end end
However, you can also have multiple session instances open per test, and even extend those instances with assertions and methods to create a very powerful testing DSL that is specific for your application. You can even reference any named routes you happen to have defined.
require "test_helper" class AdvancedTest < ActionDispatch::IntegrationTest fixtures :people, :rooms def test_login_and_speak jamis, david = login(:jamis), login(:david) room = rooms(:office) jamis.enter(room) jamis.speak(room, "anybody home?") david.enter(room) david.speak(room, "hello!") end private module CustomAssertions def enter(room) # reference a named route, for maximum internal consistency! get(room_url(id: room.id)) assert(...) ... end def speak(room, message) xml_http_request "/say/#{room.id}", message: message assert(...) ... end end def login(who) open_session do |sess| sess.extend(CustomAssertions) who = people(who) sess.post "/login", username: who.username, password: who.password assert(...) end end end
Public Class Methods
app()
click to toggle source
# File lib/action_dispatch/testing/integration.rb, line 490 def self.app @@app || ActionDispatch.test_app end
app=(app)
click to toggle source
# File lib/action_dispatch/testing/integration.rb, line 494 def self.app=(app) @@app = app end
Public Instance Methods
app()
click to toggle source
Calls superclass method
ActionDispatch::Integration::Runner#app
# File lib/action_dispatch/testing/integration.rb, line 498 def app super || self.class.app end
document_root_element()
click to toggle source
# File lib/action_dispatch/testing/integration.rb, line 507 def document_root_element html_document.root end
url_options()
click to toggle source
# File lib/action_dispatch/testing/integration.rb, line 502 def url_options reset! unless integration_session integration_session.url_options end