UNPKG

jest-launchdarkly-mock

Version:

Easily unit test LaunchDarkly feature flagged components with jest

85 lines (84 loc) 3.47 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.resetLDMocks = exports.mockFlags = exports.ldClientMock = void 0; jest.mock('launchdarkly-react-client-sdk', () => { const { camelCaseKeys } = jest.requireActual('launchdarkly-react-client-sdk'); return { asyncWithLDProvider: jest.fn(), camelCaseKeys, initialize: jest.fn(), LDProvider: jest.fn(), useLDClient: jest.fn(), useFlags: jest.fn(() => ({})), useLDClientError: jest.fn(), withLDConsumer: jest.fn(), withLDProvider: jest.fn(), }; }); const lodash_kebabcase_1 = __importDefault(require("lodash.kebabcase")); const lodash_camelcase_1 = __importDefault(require("lodash.camelcase")); const lodash_snakecase_1 = __importDefault(require("lodash.snakecase")); const launchdarkly_react_client_sdk_1 = require("launchdarkly-react-client-sdk"); const mockAsyncWithLDProvider = launchdarkly_react_client_sdk_1.asyncWithLDProvider; const mockInitialize = launchdarkly_react_client_sdk_1.initialize; const mockLDProvider = launchdarkly_react_client_sdk_1.LDProvider; const mockUseFlags = launchdarkly_react_client_sdk_1.useFlags; const mockUseLDClient = launchdarkly_react_client_sdk_1.useLDClient; const mockWithLDConsumer = launchdarkly_react_client_sdk_1.withLDConsumer; const mockWithLDProvider = launchdarkly_react_client_sdk_1.withLDProvider; exports.ldClientMock = { addHook: jest.fn(), allFlags: jest.fn(), close: jest.fn(), flush: jest.fn(), getContext: jest.fn(), identify: jest.fn(), off: jest.fn(), on: jest.fn(), setStreaming: jest.fn(), track: jest.fn(), variation: jest.fn(), variationDetail: jest.fn(), waitForInitialization: jest.fn(), waitUntilGoalsReady: jest.fn(), waitUntilReady: jest.fn(), }; /* eslint-disable @typescript-eslint/no-explicit-any */ mockAsyncWithLDProvider.mockImplementation(() => Promise.resolve((props) => props.children)); mockInitialize.mockImplementation(() => exports.ldClientMock); mockLDProvider.mockImplementation((props) => props.children); mockUseLDClient.mockImplementation(() => exports.ldClientMock); mockWithLDConsumer.mockImplementation(() => (children) => children); mockWithLDProvider.mockImplementation(() => (children) => children); /* eslint-enable @typescript-eslint/no-explicit-any */ const mockFlags = (flags) => { const result = {}; Object.keys(flags).forEach((k) => { const kebab = (0, lodash_kebabcase_1.default)(k); const camel = (0, lodash_camelcase_1.default)(k); const snake = (0, lodash_snakecase_1.default)(k); result[kebab] = flags[k]; result[camel] = flags[k]; result[snake] = flags[k]; result[k] = flags[k]; }); mockUseFlags.mockImplementation(() => { return result; }); }; exports.mockFlags = mockFlags; const resetLDMocks = () => { mockUseFlags.mockImplementation(() => ({})); Object.keys(exports.ldClientMock).forEach((k) => { // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore const jestMockFunction = exports.ldClientMock[k]; if (typeof jestMockFunction.mock !== 'undefined') { jestMockFunction.mockReset(); } }); }; exports.resetLDMocks = resetLDMocks;