pivot
pivot is a simple feature multi-variant and A/B testing framework for node and component.
It is designed to have a pluggable backend and provide a common interface to each testing strategy.
Installing
node
npm install --save pivot
component
component install CamShaft/pivot
Lookup Strategies
TODO
Assignment Strategies
TODO
Guide
Start by initializing pivot
var pivot = require("pivot");
var experiments = pivot();
You'll need to tell it about the following methods:
lookup
This method looks up the variant settings in the backend. It is called any time
pivot encounters a new feature.
experiments.lookup(function(name, variants, done){
var settings = [];
done(null, settings);
});
assign
This method takes the settings from the last call and assigns them to a user.
experiments.assign(function(name, settings, user, done){
done(null, settings[0]);
});
If you plan on using it paired with express/connect, you can also define the following.
Otherwise, pivot will serialize/deserialize using the pivot
cookie and req.user
.
serialize
experiments.serialize(function(features, req, res, next){
next();
});
deserialize
experiments.deserialize(function(req, res, next){
var features = {};
next(null, features);
});
findUser
experiments.findUser(function(req, res, next){
next(null, req.user);
});
feature
Once you have told pivot how to do things you can start adding features into the system:
experiments.feature("my-cool-test");
experiments.feature("my-other-test", ["blue", "red", "green"]);
variant
Now you can ask pivot to assign a variant to a user:
var user = {};
experiments.variant("my-cool-test", user, function(err, variant){
})
variant
is either true
or false
depending on how we implemented the assign
method.
handle
If you are using express/connect pivot comes with some batteries included:
var express = require("express")
, pivot = require("pivot");
var app = module.exports = express()
, experiments = pivot();
app.use(experiments);
...
experiments.feature("landing-page", ["minimal", "fancy"]);
app.get("/", function(req, res, next){
var view = res.locals.features["landing-page"];
res.render(view);
});
res.locals.features
is now populated with all of the enabled features for the
user.
Testing
npm install
npm test