# module Turbolinks::Assertions

### Constants

TURBOLINKS_VISIT

### Public Instance Methods

assert_redirected_to(options = {}, message = nil) click to toggle source
Calls superclass method

    # File lib/turbolinks/assertions.rb, line 5
    def assert_redirected_to(options = {}, message = nil)
      if turbolinks_request?
        assert_turbolinks_visited(options, message)
      else
        super
      end
    end

assert_turbolinks_visited(options = {}, message = nil) click to toggle source

    # File lib/turbolinks/assertions.rb, line 13
    def assert_turbolinks_visited(options = {}, message = nil)
      assert_response(:ok, message)
      assert_equal("text/javascript", response.content_type)

      visit_location, _ = turbolinks_visit_location_and_action

      redirect_is       = normalize_argument_to_redirection(visit_location)
      redirect_expected = normalize_argument_to_redirection(options)

      message ||= "Expected response to be a Turbolinks visit to <#{redirect_expected}> but was a visit to <#{redirect_is}>"
      assert_operator redirect_expected, :===, redirect_is, message
    end

turbolinks_request?() click to toggle source

Rough heuristic to detect whether this was a Turbolinks request: non-GET request with a text/javascript response.

Technically we'd check that Turbolinks-Referrer request header is also set, but that'd require us to pass the header from post/patch/etc test methods by overriding them to provide a `turbolinks:` option.

We can't check `request.xhr?` here, either, since the X-Requested-With header is cleared after controller action processing to prevent it from leaking into subsequent requests.

    # File lib/turbolinks/assertions.rb, line 36
    def turbolinks_request?
      !request.get? && response.content_type == "text/javascript"
    end

turbolinks_visit_location_and_action() click to toggle source

    # File lib/turbolinks/assertions.rb, line 40
    def turbolinks_visit_location_and_action
      if response.body =~ TURBOLINKS_VISIT
        [ $1, $2 ]
      end
    end