angular/components · error · Error
Player not initialized before ${name} called
Error message
Player not initialized before ${name} called What it means
The fake YouTube player (used for testing/offline rendering) stores event handlers that dispatch to registered listeners. Its eventHandlerFactory checks that playerConfig has been set; invoking any event (e.g. onStateChange, onReady) before the player was initialized throws `Player not initialized before ${name} called`.
Source
Thrown at src/youtube-player/fake-youtube-player.ts:95
return playerSpy;
});
playerSpy.addEventListener.and.callFake((name, listener) => {
const store: ListenersStore<typeof name> = boundListeners;
if (!store[name]) {
store[name] = new Set();
}
store[name].add(listener);
});
playerSpy.removeEventListener.and.callFake((name, listener) => {
boundListeners[name]?.delete(listener);
});
function eventHandlerFactory<EventName extends keyof YT.Events>(name: EventName) {
return (arg = {} as ListenerArg<EventName>) => {
if (!playerConfig) {
throw new Error(`Player not initialized before ${name} called`);
}
boundListeners[name]?.forEach(callback =>
(callback as (arg: ListenerArg<EventName>) => void)(arg),
);
};
}
const events: Required<YT.Events> = {
onReady: eventHandlerFactory('onReady'),
onStateChange: eventHandlerFactory('onStateChange'),
onPlaybackQualityChange: eventHandlerFactory('onPlaybackQualityChange'),
onPlaybackRateChange: eventHandlerFactory('onPlaybackRateChange'),
onError: eventHandlerFactory('onError'),
onApiChange: eventHandlerFactory('onApiChange'),
onAutoplayBlocked: eventHandlerFactory('onAutoplayBlocked'),
};
View on GitHub (pinned to 0411926e7d)
Solutions
- Await player initialization (the promise from the player factory / onReady) before firing or relying on events
- In tests, ensure setup triggers init before dispatching events (e.g. flush microtasks / await fixture.whenStable)
- Recreate the fake player if a previous init failed and left playerConfig unset
Example fix
// before
player.addEventListener('onStateChange', handler);
fireEvent('onStateChange'); // throws: playerConfig undefined
// after
await player.init(); // ensures playerConfig is set
player.addEventListener('onStateChange', handler);
fireEvent('onStateChange'); Defensive patterns
Strategy: validation
Validate before calling
// Ensure init before firing events in tests
function assertInitialized(p: {playerConfig?: unknown}): void {
if (!p.playerConfig) throw new Error('Init fake player before dispatching events');
}
// usage
await fakePlayer.init();
assertInitialized(fakePlayer);
fireEvent('onStateChange'); Type guard
function isInitialized(p: {playerConfig?: unknown}): p is {playerConfig: object} {
return p.playerConfig != null;
} Try / catch
try {
fakePlayer.fireEvent('onStateChange');
} catch (e) {
if (String(e?.message).startsWith('Player not initialized')) {
await fakePlayer.init();
fakePlayer.fireEvent('onStateChange');
}
} Prevention
- Await fake player init/creation before triggering events
- Register event listeners only after onReady
- In tests, flush microtasks/timers so init completes before event dispatch
- Recreate the fake player between tests to reset playerConfig
When it happens
Trigger: Emitting a fake player event before createPlayer()/initialization populated playerConfig — e.g. tests firing events, or addEventListener callbacks invoked during setup before init completes.
Common situations: Unit tests that trigger events synchronously before awaiting player creation; mocking the YT iframe API where load completes after listeners already fired; fake player reused across tests with stale state.
Related errors
- Cannot retrieve popup content because the combobox is closed
- Could not find tab matching filters: ${JSON.stringify(filter
- Cannot read "${filePath}" because it does not exist.
- Unable to retrieve options for autocomplete. Autocomplete pa
- Unable to retrieve option groups for autocomplete. Autocompl
AI-assisted analysis of angular/components@0411926e7d (2026-08-31).
Data as JSON: /api/errors/df62213a1a30480b.
Report an issue: GitHub.