Test Events

Inject fake events through the normal pipeline to test widget behavior without waiting for real viewers.

SBCanvas.preview.injectTestEvent

SBCanvas.preview.injectTestEvent('activity:follow', {
  username: 'TestViewer',
  provider: 'kick'
});
The event type uses the activity: prefix format. The injected event flows through the same normalization and event bus as real events, so your activities.on() listeners fire normally.

Parameters

ParamTypeDescription
typestringEvent type with prefix (e.g. 'activity:follow', 'chat:message')
dataobjectEvent payload — merged with auto-generated fields like id and timestamp

Examples

// Follow
SBCanvas.preview.injectTestEvent('activity:follow', {
  username: 'CoolViewer42',
  provider: 'kick'
});

// Tip with message
SBCanvas.preview.injectTestEvent('activity:tip', {
  username: 'GenerousFan',
  amount: 25,
  currency: 'USD',
  message: 'Keep up the great content!',
  provider: 'kick'
});

// Gift sub
SBCanvas.preview.injectTestEvent('activity:gift_sub', {
  username: 'SubGifter',
  amount: 5,
  tier: '1',
  gifted: true,
  provider: 'kick'
});

// Raid
SBCanvas.preview.injectTestEvent('activity:raid', {
  username: 'RaidLeader',
  viewers: 500,
  provider: 'rumble'
});

// Rant (Rumble)
SBCanvas.preview.injectTestEvent('activity:rant', {
  username: 'RumbleFan',
  amount: 500,
  currency: 'USD',
  message: 'Great stream today!',
  provider: 'rumble'
});

// Chat message
SBCanvas.preview.injectTestEvent('chat:message', {
  username: 'Chatter',
  text: 'Hello world!',
  emotes: []
});

Immediate Readiness

In preview mode, SBCanvas.ready() fires immediately — no backend connection is required. This means you can inject test events as soon as the page loads without waiting for a WebSocket session.
SBCanvas.ready(() => {
  // Fires instantly in preview — no 5-second timeout
  SBCanvas.preview.injectTestEvent('activity:follow', {
    username: 'InstantTest',
    provider: 'kick'
  });
});

Provider Detection

Always include provider at the top level of your payload. The normalizer reads provider directly from the event data:
SBCanvas.preview.injectTestEvent('activity:follow', {
  username: 'TestViewer',
  provider: 'kick'  // Required for correct provider detection
});
If omitted, the provider falls back to rumble.

Using the Browser Console

Append ?preview=studio to your overlay URL, then open DevTools:
SBCanvas.preview.injectTestEvent('activity:tip', {
  username: 'ConsoleTester', amount: 50, currency: 'USD', provider: 'kick'
});

Automated Test Sequences

SBCanvas.ready(() => {
  if (SBCanvas.preview.mode !== 'studio') return;

  const testEvents = [
    ['activity:follow', { username: 'User1', provider: 'kick' }],
    ['activity:follow', { username: 'User2', provider: 'kick' }],
    ['activity:subscribe', { username: 'User3', tier: '1', provider: 'kick' }],
    ['activity:tip', { username: 'User4', amount: 10, currency: 'USD', provider: 'kick' }],
  ];

  let i = 0;
  SBCanvas.setInterval(() => {
    if (i < testEvents.length) {
      SBCanvas.preview.injectTestEvent(testEvents[i][0], testEvents[i][1]);
      i++;
    }
  }, 3000);
});