Test Kitchen/SDK/JavaScript SDK
This page provides a guide to using the JavaScript Test Kitchen SDK for instrument and experiment creators.
Setup
To set up a local development environment for writing instrument code, follow the setup guide for MediaWiki and Test Kitchen. For more context and tooling recommendations, see the introduction to Test Kitchen development.
Create an instrument
Assuming that you have registered already your instrument in Test Kitchen UI, you can instantiate an instrument in your instrumentation code as follows:
const instrument = await mw.testKitchen.getInstrument( 'my-machine-readable-instrument-name' );
Once you've created an instrument, you can submit an event using send
Send a click event
send provides a simplified method to send any kind of event that use the Test Kitchen base schemas.
Here's an example of an instrument in JavaScript that uses Instrument#send to submit an event when a user clicks on an interwiki link.
function getLinkInteractionData( jqEvent ) {
const link = jqEvent.target;
return {
action_source: link.href,
action_context: link.title
};
}
const instrument = await mw.testKitchen.getInstrument( 'my-machine-readable-instrument-name' );
// 'a.extiw' will match anchors that have a extiw class. extiw is used for interwiki links.
$( '#content' ).on(
'click',
'a.extiw',
( jqEvent ) => instrument.send( 'click', getLinkInteractionData( jqEvent ) )
);
The resulting event:
- includes
action: click - includes optional interaction data (
action_sourceandaction_context) - is validated against the latest Test Kitchen base schema for web, as set in
newInstrument - is published to the specified event stream (in this case,
mediawiki.product_metrics.example), as it will have been defined when registering the instrument in Test Kitchen UI
Submit an interaction event
An interaction event is meant to represent a basic interaction with some target or some event occurring. For example, a user hovers over a UI element or an app notifies the server of its current state.
Here's an example of an instrument in JavaScript that uses Instrument#send to send an event when a user hovers over an interwiki link.
$( '#content' ).on(
'mouseover',
'a.extiw',
( jqEvent ) => instrument.send( 'hover', getLinkInteractionData( jqEvent ) )
);
The resulting event:
- includes the specified value of
action - includes optional interaction data you have provided in
getLinkInteractionData(action_sourceandaction_context) - is validated against the specified schema (in this case, the Test Kitchen base schema for web), as it will have been defined when registering the instrument in Test Kitchen UI
- is published to the specified event stream (in this case,
mediawiki.product_metrics.example), as it will have been defined when registering the instrument in Test Kitchen UI
Implementation
The JavaScript SDK is provided by the TestKitchen extension.
The EventLogging extension maintains a list of streams to be included in the module, $wgEventLoggingStreamNames, which can be used to minimize the size of the module. When $wgEventLoggingStreamNames is falsy the JavaScript SDK will not validate whether the destination stream is configured before submitting the event to the destination event service.
Reference
For up-to-date documentation, see the JavaScript SDK documentation microsite. For parameter descriptions and validation rules, see the web schema definition.