jest-launchdarkly-mock
Version:
Easily unit test LaunchDarkly feature flagged components with jest
81 lines (80 loc) • 3.53 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', function () {
var camelCaseKeys = jest.requireActual('launchdarkly-react-client-sdk').camelCaseKeys;
return {
asyncWithLDProvider: jest.fn(),
camelCaseKeys: camelCaseKeys,
LDProvider: jest.fn(),
useLDClient: jest.fn(),
useFlags: jest.fn(function () { return ({}); }),
useLDClientError: jest.fn(),
withLDConsumer: jest.fn(),
withLDProvider: jest.fn(),
};
});
var lodash_kebabcase_1 = __importDefault(require("lodash.kebabcase"));
var lodash_camelcase_1 = __importDefault(require("lodash.camelcase"));
var lodash_snakecase_1 = __importDefault(require("lodash.snakecase"));
var launchdarkly_react_client_sdk_1 = require("launchdarkly-react-client-sdk");
var mockAsyncWithLDProvider = launchdarkly_react_client_sdk_1.asyncWithLDProvider;
var mockLDProvider = launchdarkly_react_client_sdk_1.LDProvider;
var mockUseFlags = launchdarkly_react_client_sdk_1.useFlags;
var mockUseLDClient = launchdarkly_react_client_sdk_1.useLDClient;
var mockWithLDConsumer = launchdarkly_react_client_sdk_1.withLDConsumer;
var mockWithLDProvider = launchdarkly_react_client_sdk_1.withLDProvider;
exports.ldClientMock = {
track: jest.fn(),
identify: jest.fn(),
allFlags: jest.fn(),
close: jest.fn(),
flush: jest.fn(),
getContext: jest.fn(),
off: jest.fn(),
on: jest.fn(),
setStreaming: 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(function () { return Promise.resolve(function (props) { return props.children; }); });
mockLDProvider.mockImplementation(function (props) { return props.children; });
mockUseLDClient.mockImplementation(function () { return exports.ldClientMock; });
mockWithLDConsumer.mockImplementation(function () { return function (children) { return children; }; });
mockWithLDProvider.mockImplementation(function () { return function (children) { return children; }; });
/* eslint-enable @typescript-eslint/no-explicit-any */
var mockFlags = function (flags) {
mockUseFlags.mockImplementation(function () {
var result = {};
Object.keys(flags).forEach(function (k) {
var kebab = (0, lodash_kebabcase_1.default)(k);
var camel = (0, lodash_camelcase_1.default)(k);
var snake = (0, lodash_snakecase_1.default)(k);
result[kebab] = flags[k];
result[camel] = flags[k];
result[snake] = flags[k];
result[k] = flags[k];
});
return result;
});
};
exports.mockFlags = mockFlags;
var resetLDMocks = function () {
mockUseFlags.mockImplementation(function () { return ({}); });
Object.keys(exports.ldClientMock).forEach(function (k) {
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
var jestMockFunction = exports.ldClientMock[k];
if (typeof jestMockFunction.mock !== 'undefined') {
jestMockFunction.mockReset();
}
});
};
exports.resetLDMocks = resetLDMocks;