efate
Version:
javascript test fixture generator. Autofixturejs 2.0
76 lines (75 loc) • 2.62 kB
JavaScript
"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;