UNPKG

react-ab-test

Version:

A/B testing React components and debug tools. Isomorphic with a simple, universal interface. Well documented and lightweight. Tested in popular browsers and Node.js. Includes helpers for Mixpanel and Segment.com.

54 lines (52 loc) 1.84 kB
import React from "react"; import ReactDOMServer from "react-dom/server"; import Experiment from "../../src/Experiment.jsx"; import Variant from "../../src/Variant.jsx"; import emitter from "../../src/emitter.jsx"; import assert from "assert"; import co from "co"; import UUID from "node-uuid"; describe("Experiment", function() { this.timeout(10000); it("should render to a string.", co.wrap(function *(){ let experimentName = UUID.v4(); let App = React.createClass({ render: function(){ return <Experiment name={experimentName}> <Variant name="A"><div id="variant-a" /></Variant> <Variant name="B"><div id="variant-b" /></Variant> </Experiment>; } }); let result = ReactDOMServer.renderToString(<App />); })); it("should choose the same variant when a user identifier is defined.", co.wrap(function *(){ let userIdentifier = UUID.v4(); let experimentName = UUID.v4(); let variantNames = []; for(let i = 0; i < 100; i++) { variantNames.push(UUID.v4()); } let App = React.createClass({ render: function(){ return <Experiment name={experimentName} userIdentifier={userIdentifier}> {variantNames.map(name => { return <Variant key={name} name={name}><div id={'variant-' + name}></div></Variant> })} </Experiment>; } }); let chosenVariant; emitter.once("play", function(experimentName, variantName){ chosenVariant = variantName; }); let result = ReactDOMServer.renderToString(<App />); assert(chosenVariant); assert.notEqual(result.indexOf(chosenVariant), -1); for(let i = 0; i < 100; i++) { emitter._reset(); result = ReactDOMServer.renderToString(<App />); assert.notEqual(result.indexOf(chosenVariant), -1); } })); });