jest-launchdarkly-mock
Version:
Easily unit test LaunchDarkly feature flagged components with jest
85 lines (84 loc) • 3.47 kB
JavaScript
;
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;