diff --git a/packages/experiment-browser/src/experimentClient.ts b/packages/experiment-browser/src/experimentClient.ts index 720e26de..e2e3b9ad 100644 --- a/packages/experiment-browser/src/experimentClient.ts +++ b/packages/experiment-browser/src/experimentClient.ts @@ -182,6 +182,15 @@ export class ExperimentClient implements Client { return { ...this.secondaryVariants(), ...this.sourceVariants() }; } + /** + * Clear all variants in the cache and storage. + * + */ + public clear(): void { + this.storage.clear(); + this.storage.save(); + } + /** * Get a copy of the internal {@link ExperimentUser} object if it is set. * diff --git a/packages/experiment-browser/src/stubClient.ts b/packages/experiment-browser/src/stubClient.ts index eb9973d2..cc167360 100644 --- a/packages/experiment-browser/src/stubClient.ts +++ b/packages/experiment-browser/src/stubClient.ts @@ -38,5 +38,7 @@ export class StubExperimentClient implements Client { return {}; } + public clear(): void {} + public exposure(key: string): void {} } diff --git a/packages/experiment-browser/src/types/client.ts b/packages/experiment-browser/src/types/client.ts index 2f2589c4..7a8603ba 100644 --- a/packages/experiment-browser/src/types/client.ts +++ b/packages/experiment-browser/src/types/client.ts @@ -10,6 +10,7 @@ export interface Client { fetch(user?: ExperimentUser): Promise; variant(key: string, fallback?: string | Variant): Variant; all(): Variants; + clear(): void; exposure(key: string): void; getUser(): ExperimentUser; setUser(user: ExperimentUser): void; diff --git a/packages/experiment-browser/test/client.test.ts b/packages/experiment-browser/test/client.test.ts index 0c40736d..ce50ea31 100644 --- a/packages/experiment-browser/test/client.test.ts +++ b/packages/experiment-browser/test/client.test.ts @@ -162,6 +162,19 @@ test('ExperimentClient.all, initial variants returned', async () => { expect(variants).toEqual(initialVariants); }); +/** + * Call clear() to clear all variants in the cache and storage. + */ +test('ExperimentClient.clear, clear the variants in storage', async () => { + const client = new ExperimentClient(API_KEY, {}); + await client.fetch(testUser); + const variant = client.variant('sdk-ci-test'); + expect(variant).toEqual({ value: 'on', payload: 'payload' }); + client.clear(); + const clearedVariants = client.all(); + expect(clearedVariants).toEqual({}); +}); + /** * Setting source to initial variants will prioritize variants in initial * variants over those stored in local storage.