123456789_123456789_123456789_123456789_123456789_

Class: ActionCable::Connection::TestCase

Overview

Unit test Action Cable connections.

Useful to check whether a connection’s identified_by gets assigned properly and that any improper connection requests are rejected.

Basic example

Unit tests are written as follows:

  1. Simulate a connection attempt by calling connect.

  2. Assert state, e.g. identifiers, has been assigned.

    class ApplicationCable::ConnectionTest < ActionCable::Connection::TestCase

    def test_connects_with_proper_cookie
      # Simulate the connection request with a cookie.
      cookies["user_id"] = users(:john).id
    
      connect
    
      # Assert the connection identifier matches the fixture.
      assert_equal users(:john).id, connection.user.id
    end
    
    def test_rejects_connection_without_proper_cookie
      assert_reject_connection { connect }
    end

    end

connect accepts additional information about the HTTP request with the params, headers, session, and ::Rack env options.

def test_connect_with_headers_and_query_string
  connect params: { user_id: 1 }, headers: { "X-API-TOKEN" => "secret-my" }

  assert_equal "1", connection.user.id
  assert_equal "secret-my", connection.token
end

def test_connect_with_params
  connect params: { user_id: 1 }

  assert_equal "1", connection.user.id
end

You can also set up the correct cookies before the connection request:

def test_connect_with_cookies
  # Plain cookies:
  cookies["user_id"] = 1

  # Or signed/encrypted:
  # cookies.signed["user_id"] = 1
  # cookies.encrypted["user_id"] = 1

  connect

  assert_equal "1", connection.user_id
end

Connection is automatically inferred

TestCase will automatically infer the connection under test from the test class name. If the channel cannot be inferred from the test class name, you can explicitly set it with tests.

class ConnectionTest < ActionCable::Connection::TestCase
  tests ApplicationCable::Connection
end

Constant Summary

::ActiveSupport::Testing::Assertions - Included

UNTRACKED

::ActiveSupport::TestCase - Inherited

Assertion

Behavior - Included

DEFAULT_PATH

Behavior - Attributes & Methods

Class Attribute Summary

::ActiveSupport::TestCase - Inherited

.file_fixture_path, .file_fixture_path?,
.test_order

Returns the order in which test cases are run.

.test_order=

Sets the order in which test cases are run.

Class Method Summary

::ActiveSupport::TestCase - Inherited

.fixture_paths

Returns the ::ActiveRecord::FixtureSet collection.

.fixture_paths=

Sets the given path to the fixture set.

.parallelize

Parallelizes the test suite.

.parallelize_setup

Set up hook for parallel testing.

.parallelize_teardown

Clean up hook for parallel testing.

::ActiveSupport::Testing::Declarative - Extended

test

Helper to define a test method using a ::String.

Instance Attribute Summary

Instance Method Summary

Behavior - Included

#connect

Performs connection attempt to exert #connect on the connection under test.

#cookies,
#disconnect

Exert #disconnect on the connection under test.

#build_test_request

Assertions - Included

#assert_reject_connection

Asserts that the connection is rejected (via reject_unauthorized_connection).

::ActiveSupport::TestCase - Inherited

::ActiveSupport::Testing::FileFixtures - Included

#file_fixture

Returns a ::Pathname to the fixture file named fixture_name.

::ActiveSupport::Testing::TimeHelpers - Included

#after_teardown,
#freeze_time

Calls travel_to with Time.now.

#travel

Changes current time to the time in the future or in the past by a given time difference by stubbing Time.now, Date.today, and DateTime.now.

#travel_back

Returns the current time back to its original state, by removing the stubs added by travel, travel_to, and freeze_time.

#travel_to

Changes current time to the given time by stubbing Time.now, Time.new, Date.today, and DateTime.now to return the time or date passed into this method.

#unfreeze_time
#simple_stubs

::ActiveSupport::Testing::ConstantStubbing - Included

#stub_const

Changes the value of a constant for the duration of a block.

::ActiveSupport::Testing::Deprecation - Included

#assert_deprecated

Asserts that a matching deprecation warning was emitted by the given deprecator during the execution of the yielded block.

#assert_not_deprecated

Asserts that no deprecation warnings are emitted by the given deprecator during the execution of the yielded block.

#collect_deprecations

Returns the return value of the block and an array of all the deprecation warnings emitted by the given ActionCable.deprecator during the execution of the yielded block.

::ActiveSupport::Testing::ErrorReporterAssertions - Included

#assert_error_reported

Assertion that the block should cause at least one exception to be reported to Rails.error.

#assert_no_error_reported

Assertion that the block should not cause an exception to be reported to Rails.error.

::ActiveSupport::Testing::Assertions - Included

#assert_changes

Assertion that the result of evaluating an expression is changed before and after invoking the passed in block.

#assert_difference

Test numeric difference between the return value of an expression as a result of what is evaluated in the yielded block.

#assert_no_changes

Assertion that the result of evaluating an expression is not changed before and after invoking the passed in block.

#assert_no_difference

Assertion that the numeric result of evaluating an expression is not changed before and after invoking the passed in block.

#assert_not

Asserts that an expression is not truthy.

#assert_nothing_raised

Assertion that the block should not raise an exception.

#assert_raise
#assert_raises

Asserts that a block raises one of exp.

#_assert_nothing_raised_or_warn, #_callable_to_source_string

::ActiveSupport::Testing::TestsWithoutAssertions - Included

::ActiveSupport::Testing::SetupAndTeardown - Included

::ActiveSupport::Testing::TaggedLogging - Included

Class Attribute Details

._connection_class (rw)

[ GitHub ]

  
# File 'actioncable/lib/action_cable/connection/test_case.rb', line 151

class_attribute :_connection_class

._connection_class?Boolean (rw)

[ GitHub ]

  
# File 'actioncable/lib/action_cable/connection/test_case.rb', line 151

class_attribute :_connection_class

Instance Attribute Details

#_connection_class (rw)

[ GitHub ]

  
# File 'actioncable/lib/action_cable/connection/test_case.rb', line 151

class_attribute :_connection_class

#_connection_class?Boolean (rw)

[ GitHub ]

  
# File 'actioncable/lib/action_cable/connection/test_case.rb', line 151

class_attribute :_connection_class

#connection (readonly)

[ GitHub ]

  
# File 'actioncable/lib/action_cable/connection/test_case.rb', line 153

attr_reader :connection