Module: Spikard::Testing

Defined in:
lib/spikard/testing.rb,
lib/spikard/response.rb

Overview

Testing helpers that wrap the native Ruby extension.

Defined Under Namespace

Classes: InlineSseEvent, Response, SseEvent, SseStream, TestClient, WebSocketMessage, WebSocketTestConnection

Class Method Summary collapse

Class Method Details

.build_native_test_client(app, config) ⇒ Object



36
37
38
39
40
41
42
43
44
45
# File 'lib/spikard/testing.rb', line 36

def build_native_test_client(app, config)
  routes_json = app.normalized_routes_json
  handlers = app.handler_map.transform_keys(&:to_sym)
  ws_handlers = app.websocket_handlers || {}
  sse_producers = app.sse_producers || {}
  hooks = app.instance_variable_get(:@native_hooks)
  dependencies = app.dependencies || {}
  payload = { hooks: hooks, dependencies: dependencies }
  Spikard::Native::TestClient.new(routes_json, handlers, config, ws_handlers, sse_producers, payload)
end

.create_test_client(app, config: nil) ⇒ Object



11
12
13
14
15
16
17
18
# File 'lib/spikard/testing.rb', line 11

def create_test_client(app, config: nil)
  trace('create_test_client:start')
  ensure_native_test_client!
  config = resolve_test_config(app, config)
  native = build_native_test_client(app, config)
  trace('create_test_client:done')
  TestClient.new(native)
end

.ensure_native_test_client!Object

Raises:

  • (LoadError)


20
21
22
23
24
# File 'lib/spikard/testing.rb', line 20

def ensure_native_test_client!
  return if defined?(Spikard::Native::TestClient)

  raise LoadError, 'Spikard native test client is not available. Build the native extension before running tests.'
end

.resolve_test_config(app, config) ⇒ Object



26
27
28
29
30
31
32
33
34
# File 'lib/spikard/testing.rb', line 26

def resolve_test_config(app, config)
  return config if config

  if app.instance_variable_defined?(:@__spikard_test_config)
    return app.instance_variable_get(:@__spikard_test_config)
  end

  Spikard::ServerConfig.new
end

.trace(message) ⇒ Object



290
291
292
293
294
# File 'lib/spikard/testing.rb', line 290

def trace(message)
  return unless ENV['SPIKARD_RB_TEST_TRACE'] == '1'

  warn("[spikard-rb-test] #{message}")
end