TestBox JavaScript
Because your web app and TestBox operate on different domains, it is impossible for our
front-end to make inquiries about the status of the iFrame directly. As such, we have
built messaging infrastructure to communicate the health and status of the iFrame. This
requires a small amount of JavaScript to be added to your HTML head
, as shown here:
Installation
First, install the package in to your front-end.
npm i @testboxlab/browser
yarn add @testboxlab/browser
Usage and Purpose
This package provides two sets of functionality:
- Communication to TestBox for user experience purposes
- Client-side Auto-login
Base Usage
If you just need the basics of TestBox for your app, you'll use something like this:
import {startTestBox} from "@testboxlab/browser";
startTestBox({
allowFullStory: true,
// Allowing FullStory allows us to give you insights into how users
// are using your web application compared to others. However, it is
// explicitly opt-in in case you do not wish for your environments
// to be recorded.
});
This will allow TestBox to communicate with your website. This communication is important to remove loading states and generally provide a good user experience.
If you use React, your implementation might look like this:
import {startTestBox} from "@testboxlab/browser";
import {useEffect} from "react";
export default function App() {
useEffect(() => {
startTestBox();
}, []);
}
Navigation
If you use react-router, or any kind of client-side routing, you may want to override
our standard navigation behavior. Navigation happens when a user chooses a use case
they want to try out. By default, TestBox will use window.location
to push the iFrame
to a new URL. You might want to do something more sophisticated.
There are two ways to interact with the browser SDK for events:
// Option 1: you can use the config object
startTestBox({
navigateHandler: (url) => {
history.push(url);
}
});
// Option 2: you can set the handler directly
import testbox from "@testboxlab/browser-sdk";
testbox.navigateHandler = (url) => {
history.push(url);
};
Auto-login
If you have opted to use our client-side auto-login functionality, you have a bit more work to do.
On your login page/component, you will want to add some code similar to the following:
import testbox from "@testboxlab/browser";
testbox.loginHandler = async ({email, password, totp_token, first_name, last_name}) => {
// The fields above are currently the items you have access to using in your login function
//
// So where do these come from? During trial creation, your integration will return a
// set of account credentials in the form of a TrialUser object. We save these creds
// and then pass them to the app when one of our user starts testing the product
// The return value for this function should be the relative path the user should be redirected to
// after login
// For example
await authService.login(email, password);
// After logging in, return the next url, testbox will redirect
return "/dashboard";
// or
const resp = await fetch("/pedals/login/", {
method: "POST",
headers: {
"Content-Type": "application/json"
}
});
if (resp.status === 500) {
throw Error("Error: retrying login");
} else if (resp.ok) {
// After logging in, return the next url, testbox will redirect
console.log("Logging into Pedals!");
return "/dashboard";
} else {
console.log("Failed to log into Pedals!");
return false;
}
}
Like navigation, you can also configure this at run time:
startTestBox({
loginHandler: doLoginFunc
});
Testing
Work in progress! For now, we will test this for you. But soon you will have a place to manage and validate this info.
Testing your installation
If you'd like to verify that you have installed the script correctly, you can use our self-check tool which can verify that everything is working!
Package testing
If you want to test this package, simply run npm run test
. It will run the Cypress
tests locally.