@@ -4,6 +4,11 @@ import sinon from "sinon";
44import { Experiment } from "../../src" ;
55
66describe ( "experiment" , ( ) => {
7+ afterEach ( ( ) => {
8+ delete window . google_optimize ;
9+ delete window . dataLayer ;
10+ } ) ;
11+
712 it ( "should require experiment id" , ( ) => {
813 expect ( ( ) => shallow ( < Experiment /> ) ) . to . throw ( ) ;
914 } ) ;
@@ -50,5 +55,32 @@ describe("experiment", () => {
5055
5156 expect ( wrapper . find ( Loader ) ) . to . have . lengthOf ( 1 ) ;
5257 } ) ;
58+
59+ it ( "should update variant after optimize is loaded" , ( ) => {
60+ delete window . dataLayer ;
61+ const wrapper = shallow ( < Experiment id = "abc" /> ) ;
62+
63+ expect ( wrapper . state ( "variant" ) ) . to . be . equal ( null ) ;
64+
65+ // Load google optimize
66+ window . google_optimize = { get : sinon . stub ( ) . returns ( "2" ) } ;
67+ window . dataLayer . hide . end ( ) ;
68+
69+ expect ( wrapper . state ( "variant" ) ) . to . be . equal ( "2" ) ;
70+ } ) ;
71+
72+ it ( "should not update variant after optimize is loaded if component was unmounted" , ( ) => {
73+ delete window . dataLayer ;
74+ const wrapper = shallow ( < Experiment id = "abc" /> ) ;
75+
76+ expect ( wrapper . state ( "variant" ) ) . to . be . equal ( null ) ;
77+
78+ wrapper . unmount ( ) ;
79+ // Load google optimize
80+ window . google_optimize = { get : sinon . stub ( ) . returns ( "2" ) } ;
81+
82+ // If component state is updated while component is unmounted, this call will crash
83+ window . dataLayer . hide . end ( ) ;
84+ } ) ;
5385 } ) ;
5486} ) ;
0 commit comments