UNPKG

efate

Version:

javascript test fixture generator. Autofixturejs 2.0

76 lines (75 loc) 2.62 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const debug_1 = __importDefault(require("debug")); const lodash_mergewith_1 = __importDefault(require("lodash.mergewith")); const utils_1 = require("./utils"); const debug = (0, debug_1.default)('efate:fixture'); const mergeOverrides = (objValue, newValue) => { if (Array.isArray(objValue)) { return newValue; } }; class Fixture { constructor(builders, extendFixture) { this.omittedFields = new Set(); this.builders = []; this.instanceCount = 1; this.builders = builders; if (extendFixture.length > 0) { this.builders.push(...extendFixture.map(fixture => fixture.builders).flat()); } } create(overrides) { const fixture = {}; this.builders.forEach((builder) => { debug('builder: %o', builder); const field = builder(this.instanceCount); if (this.omittedFields.has(field.name)) { debug('omitting field %s', field.name); } else { debug('generated field %o', field); Object.defineProperty(fixture, field.name, { value: field.value, enumerable: true, writable: true, }); } }); this.omittedFields.clear(); this.instanceCount++; debug('fixture: %o, overrides: %o', fixture, overrides); if (overrides) { (0, utils_1.isFunction)(overrides) ? overrides(fixture) : (0, lodash_mergewith_1.default)(fixture, overrides, mergeOverrides); debug('fixture after applying overrides: %o', fixture); } return fixture; } createArrayWith(length, params) { const results = []; for (let i = 0; i < length; i++) { if (!params) { results.push(this.create()); continue; } if ((0, utils_1.isFunction)(params)) { results.push(params(i, this.create.bind(this))); continue; } if (Array.isArray(params)) { results.push(this.create(params[i])); continue; } results.push(this.create(params)); } return results; } omit(...fields) { this.omittedFields = new Set(fields); return this; } } exports.default = Fixture;