smp-data-builder

Just data builder for using in tests. You should extend this builder for your own builders to have more expressive interfaces

Usage no npm install needed!

<script type="module">
  import smpDataBuilder from 'https://cdn.skypack.dev/smp-data-builder';
</script>

README

Simple Data Builder

Just data builder for using in tests. You should extend this builder for your own builders to have more expressive interfaces

How it works

Example:

const DataBuilder = require('smp-data-builder');

class CarBuilder extends DataBuilder {
    withWheels(num) {
        return this.with('wheels', num);
    }

    withPassenger(passenger) {
        // This will concatenate existing 'passengers' with new passenger every time
        return this.with('passengers', [ passenger ]);
    }

    withCharacteristics(charName, charVal) {
        // This will merge existing 'characteristics' object with new object every time
        return this.with('characteristics', {
            [charName]: charVal
        });
    }
}

/* ... */

const carBuilder = new CarBuilder();
carBuilder.withWheels(2).withPassenger('John Doe').withCharacteristics({ speed: 100 });

const car = carBuilder.build();
/*
    {
        wheels: 2,
        passengers: [ 'John Doe' ],
        characteristics: {
            speed: 100
        }
    }
*/

build() returns new object every time so:

carBuilder.build() !== carBuilder.build()

Note: when you call with() for existing property and both existing property and new value are objects they will be merged. Let's set up some data:

this.with('someObject', { a: 1 });

Result:

this.obj = {
    someObject: {
        a: 1
    }
};

Using 'with' with object value again is going to merge objects:

this.with('someObject', { b: 2 });

Result:

this.obj = {
    someObject: {
        a: 1,
        b: 2
    }
};

But after using 'with' with another value type, 'someObject' will be replaced

this.with('someObject', 123);

Result:

this.obj = {
    someObject: 123
};

Same works for arrays but values will be concatenated.

Simple Data Builder API

There are only 2 methods:

  • with(propertyName, value) — place given value under propertyName in data to be built, returns current DataBuilder instance;
  • build() — builds object, returns new object every time build() is called;