grafana/k6 · error

a value for '%s' should be callable

Error message

a value for '%s' should be callable

What it means

Type guard in the WebSocket event-handler setter: on<event> (e.g., onopen, onmessage, onclose, onerror) was assigned a non-null value that is not a function. Setting the handler to null/undefined is allowed and unsets it, but any other non-callable value (number, string, object) is rejected, mirroring the browser behavior where event handler IDL attributes must be callbacks or null.

Source

Thrown at internal/js/modules/k6/websockets/websockets.go:255

			common.Throw(rt, fmt.Errorf("not supported on-handler '%s'", property))
		}

		must(rt, w.obj.DefineAccessorProperty(
			property, rt.ToValue(func() sobek.Value {
				return rt.ToValue(el.getOn)
			}), rt.ToValue(func(call sobek.FunctionCall) sobek.Value {
				arg := call.Argument(0)

				// it's possible to unset handlers by setting them to null
				if common.IsNullish(arg) {
					el.setOn(nil)

					return nil
				}

				fn, isFunc := sobek.AssertFunction(arg)
				if !isFunc {
					common.Throw(rt, fmt.Errorf("a value for '%s' should be callable", property))
				}

				el.setOn(func(v sobek.Value) (sobek.Value, error) { return fn(sobek.Undefined(), v) })

				return nil
			}), sobek.FLAG_FALSE, sobek.FLAG_TRUE))
	}

	setOn("onmessage", w.eventListeners.getType(events.MESSAGE))
	setOn("onerror", w.eventListeners.getType(events.ERROR))
	setOn("onopen", w.eventListeners.getType(events.OPEN))
	setOn("onclose", w.eventListeners.getType(events.CLOSE))
	setOn("onping", w.eventListeners.getType(events.PING))
	setOn("onpong", w.eventListeners.getType(events.PONG))

	defineReadyStateProperties(rt, w.obj)
}

View on GitHub (pinned to 165bb3c1a4)

Solutions

  1. Assign a function to the on<event> property: ws.onmessage = (ev) => { ... }
  2. Use ws.addEventListener('message', handler) as an alternative
  3. Pass null instead of a non-function value when clearing a handler
Defensive patterns

Strategy: type-guard

When it happens

Trigger: Thrown at internal/js/modules/k6/websockets/websockets.go:244 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of grafana/k6@165bb3c1a4 (2026-08-18). Data as JSON: /api/errors/e2435cc458ad2832. Report an issue: GitHub.