Understanding Test Triggers
Test Triggers
When creating JavaScript API tests, you'll need to choose between Automatic and Manual triggers. This determines when and how visitors become eligible to participate in your test.
Automatic Trigger
With automatic triggers, visitors enter the test immediately when the page loads, before any JavaScript API calls.
How it works:
// Visitor is ALREADY in the test before this code runs
const isActive = await window.shoplift.isHypothesisActive('hypothesis-id');
// This just checks their assignment
Characteristics:
Test participation triggered on page load
Every visitor who meets targeting criteria enters the test
Test participation tracked even if feature isn't used
Best for always-visible elements
Use Cases:
Hero banners
Navigation changes
Global UI elements
Chat widgets
Promotional bars
Footer modifications
Example: Automatic Trigger for Hero Banner
// Test triggers for ALL visitors immediately on page load
document.addEventListener('DOMContentLoaded', async () => {
const showNewHero = await window.shoplift.isHypothesisActive('hero-v2-id');
if (showNewHero) {
document.querySelector('.hero').innerHTML = newHeroContent;
}
// Even visitors who scroll past immediately are in the test
});
Manual Trigger
With manual triggers, visitors only enter the test when your code calls isHypothesisActive() for the first time.
How it works:
// No test participation yet
button.addEventListener('click', async () => {
// Test participation triggered NOW, on first call
const isActive = await window.shoplift.isHypothesisActive('hypothesis-id');
// Visitor is now permanently assigned to a variant
});
Characteristics:
Test participation triggered by JavaScript call
Only visitors who trigger the action enter the test
More accurate test results (only engaged users)
Reduces test pollution from unengaged visitors
Use Cases:
Mini carts
Quick view modals
Dropdown menus
Search overlays
Product quick-add features
Any user-triggered interaction
Example: Manual Trigger for Mini Cart
// Test only triggers when visitors actually open the cart
document.querySelector('.cart-icon').addEventListener('click', async () => {
// First click triggers test participation
const useNewCart = await window.shoplift.isHypothesisActive('cart-v2-id');
if (useNewCart) {
openNewMiniCart();
} else {
openStandardCart();
}
// Only cart users are in the test data
});
Choosing the Right Test Trigger
Decision Framework
Is the tested element always visible?
Yes → Automatic trigger
No → Manual trigger
Should all visitors be in the test?
Yes → Automatic trigger
No → Manual trigger
Is it activated by user action?
Yes → Manual trigger
No → Automatic trigger
Do you want to measure engagement rate?
Yes → Manual trigger
No → Either works
When test triggers
Page load
First API call
Visitors in test
All who meet targeting
Only those who interact
Best for
Always-visible elements
User-activated features
Sample size
Larger (all visitors)
Smaller (engaged users only)
Statistical significance
Reached faster
Takes longer
Data quality
Includes unengaged users
Only engaged users
Performance impact
Immediate assignment
Deferred assignment
Last updated
Was this helpful?