Module: TrackRelay::Testing::MinitestAssertions

Defined in:
lib/track_relay/testing/minitest_assertions.rb

Overview

Minitest assertions for use against the active Subscribers::Test (the one installed by TrackRelay.test_mode!).

Designed to be mixed into ‘ActiveSupport::TestCase` / `Minitest::Test` either directly or via Helpers, which also registers per-test setup/teardown to enable test mode automatically.

Used directly:

class MyTest < ActiveSupport::TestCase
  include TrackRelay::Testing::MinitestAssertions

  setup    { TrackRelay.test_mode! }
  teardown { TrackRelay.test_mode_off! }

  test "fires :foo" do
    MyService.run!
    assert_tracked :foo, user_id: 1
  end
end

Or via Helpers, which wires the setup/teardown for you.

Instance Method Summary collapse

Instance Method Details

#assert_tracked(name, **expected_params) ⇒ void

This method returns an undefined value.

Assert at least one event named ‘name` was captured. When `expected_params` is supplied, also assert at least one matching event has params that include every key/value pair in `expected_params` (subset semantics).

Parameters:

  • name (Symbol)
  • expected_params (Hash{Symbol => Object})

Raises:

  • (Minitest::Assertion)

    when the assertion fails



48
49
50
51
52
53
54
55
56
57
# File 'lib/track_relay/testing/minitest_assertions.rb', line 48

def assert_tracked(name, **expected_params)
  events = track_relay_test.find(name)
  assert events.any?,
    "Expected an event :#{name} to be tracked, but found #{track_relay_test.events.map(&:name).inspect}"
  return if expected_params.empty?

  match = events.find { |e| expected_params.all? { |k, v| e.params[k] == v } }
  assert match,
    "Expected :#{name} with params >= #{expected_params.inspect}, got #{events.map(&:params).inspect}"
end

#refute_tracked(name) ⇒ void

This method returns an undefined value.

Assert no event named ‘name` was captured.

Parameters:

  • name (Symbol)

Raises:

  • (Minitest::Assertion)

    when an event named ‘name` was tracked



64
65
66
67
68
# File 'lib/track_relay/testing/minitest_assertions.rb', line 64

def refute_tracked(name)
  events = track_relay_test.find(name)
  refute events.any?,
    "Expected no event :#{name} to be tracked, but got #{events.map(&:params).inspect}"
end

#track_relay_testTrackRelay::Subscribers::Test

Return the active Test subscriber, or raise a helpful message if TrackRelay.test_mode! has not been called yet.

Returns:

Raises:

  • (RuntimeError)


34
35
36
37
# File 'lib/track_relay/testing/minitest_assertions.rb', line 34

def track_relay_test
  TrackRelay.test_subscriber ||
    raise("Call TrackRelay.test_mode! before using assert_tracked / refute_tracked")
end