@iamkenos/iris
Version:
Test API endpoints with Axios & Jest using a collection of custom matchers and built-in utility functions.
99 lines • 4.46 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.configure = void 0;
const fs = __importStar(require("fs-extra"));
const path = __importStar(require("path"));
const callsites_1 = __importDefault(require("callsites"));
const dotenv_1 = __importDefault(require("dotenv"));
function loadEnv(baseDir) {
const { NODE_ENV } = process.env;
dotenv_1.default.config({ path: NODE_ENV ? path.join(baseDir, `.env.${NODE_ENV}`) : path.join(baseDir, ".env") });
}
function getConfigResultsDir(overrides) {
const { RESULTS_DIR } = process.env;
const { resultsDir = "results/", baseDir } = overrides;
return path.join(baseDir, RESULTS_DIR ? RESULTS_DIR : resultsDir);
}
function getConfigSnapshotsDir(overrides) {
const { SNAPSHOTS_DIR } = process.env;
const { snapshotsDir = "snapshots/", baseDir } = overrides;
return path.join(baseDir, SNAPSHOTS_DIR ? SNAPSHOTS_DIR : snapshotsDir);
}
function getConfigSnapshots(overrides) {
const [actualDir, expectedDir, diffDir] = ["actual", "expected", "diff"];
const { snapshots } = overrides;
const snapshotsDir = getConfigSnapshotsDir(overrides);
const snapshotOptions = {
schema: {
outDir: "schema",
...snapshots?.schema
}
};
Object.keys(snapshotOptions).forEach(key => {
snapshotOptions[key].outDir = path.resolve(snapshotsDir, snapshotOptions[key].outDir);
snapshotOptions[key].actualDir = path.resolve(snapshotOptions[key].outDir, actualDir);
snapshotOptions[key].expectedDir = path.resolve(snapshotOptions[key].outDir, expectedDir);
snapshotOptions[key].diffDir = path.resolve(snapshotOptions[key].outDir, diffDir);
fs.removeSync(snapshotOptions[key].actualDir);
fs.removeSync(snapshotOptions[key].diffDir);
});
return snapshotOptions;
}
function getPresetTestResultsProcessor(overrides) {
const resultsDir = getConfigResultsDir(overrides);
process.env.JEST_HTML_REPORTER_OUTPUT_PATH = path.join(resultsDir, "report.html");
process.env.JEST_HTML_REPORTER_INCLUDE_FAILURE_MSG = "true";
process.env.JEST_HTML_REPORTER_INCLUDE_SUITE_FAILURE = "true";
const testResultsProcessor = path.join(process.cwd(), "node_modules/jest-html-reporter");
return testResultsProcessor;
}
function configure(overrides = {}) {
const baseDir = path.dirname((0, callsites_1.default)()[1].getFileName()).replace("file://", "");
loadEnv(baseDir);
// custom options defaults
overrides.baseDir = baseDir;
const iris = {
baseDir,
resultsDir: getConfigResultsDir(overrides),
snapshots: getConfigSnapshots(overrides)
};
// jest options defaults
const config = {
...overrides,
preset: path.resolve(__dirname, "../../"),
testResultsProcessor: getPresetTestResultsProcessor(overrides)
};
// remove custom config props from here then assign everything under globals so we can get the config object from there
delete config.baseDir;
const { resultsDir, snapshotsDir, snapshots, globals, ...rest } = config; // eslint-disable-line
config.globals = { ...globals, iris: { config: { ...iris, ...rest } } };
return config;
}
exports.configure = configure;
//# sourceMappingURL=index.js.map