UNPKG

2.19 kBJavaScriptView Raw
1import React from 'react';
2import { render, cleanup } from '@testing-library/react';
3import useExperiment from './useExperiment';
4import { StaticRouter } from 'react-router';
5import { CookiesProvider } from 'react-cookie';
6import Cookies from 'universal-cookie';
7import ExperimentsProvider from './ExperimentsProvider';
8import AnalyticsProvider from '../analytics/AnalyticsProvider';
9import { ConfigProvider } from '../components/ConfigProvider';
10import { ChannelProvider } from '../components/ChannelContext';
11import { ChannelHandler } from '../ChannelHandler/ChannelHandler';
12import { channels, selectedChannel } from '../test-utils/variables';
13import { HelmetProvider } from 'react-helmet-async';
14afterEach(cleanup);
15
16const Experiment = () => {
17 const first = useExperiment('test', 1);
18 const second = useExperiment('test', 2);
19
20 if (first) {
21 return <div>First</div>;
22 } else if (second) {
23 return <div>Second</div>;
24 } else {
25 return <div>Original</div>;
26 }
27};
28
29const setup = ({ cookies }) => {
30 const channelHandler = new ChannelHandler({
31 channels,
32 selectedChannel
33 });
34 return render(
35 <StaticRouter>
36 <CookiesProvider cookies={cookies}>
37 <HelmetProvider context={{}}>
38 <ChannelProvider channelHandler={channelHandler}>
39 <ConfigProvider config={{}}>
40 <AnalyticsProvider config={{}}>
41 <ExperimentsProvider>
42 <Experiment />
43 </ExperimentsProvider>
44 </AnalyticsProvider>
45 </ConfigProvider>
46 </ChannelProvider>
47 </HelmetProvider>
48 </CookiesProvider>
49 </StaticRouter>
50 );
51};
52
53describe('experiments', () => {
54 describe('a/b testing', () => {
55 it('renders original if no cookie was set', () => {
56 const cookies = new Cookies({});
57 const { getByText } = setup({ cookies });
58 expect(getByText('Original')).toBeTruthy();
59 });
60
61 it('renders a specific variant if that variant was selected', () => {
62 const cookies = new Cookies({
63 optimizeExperiment: 'test.2'
64 });
65 const { getByText } = setup({ cookies });
66 expect(getByText('Second')).toBeTruthy();
67 });
68 });
69});