Entity Factory Quick Example

node v10.24.1
version: 3.1.0
endpointsharetweet
Define the blueprints which will be used by entity factory.
const { ObjectBlueprint } = require('@entity-factory/core'); class UserBlueprint extends ObjectBlueprint { constructor() { super(); this.type('user'); this.options({ generateIds: true, idAttribute: 'id', }); this.define(async ({ faker, factory }) => ({ username: faker.internet.userName(), email: faker.internet.email(), active: faker.random.boolean(), })); // define a state transform to return a user with embedded posts this.state('with-posts', async ({ faker, factory }) => ({ posts: await factory.for('post').create(2), })); } } class PostBlueprint extends ObjectBlueprint { constructor() { super(); this.options({ generateIds: true, idAttribute: 'post_id', }); this.type('post'); this.define(async ({ faker, factory }) => ({ title: faker.company.bsBuzz(), body: faker.lorem.sentences(2), })); } }
Create the factory using the blueprints
const { EntityFactory } = require('@entity-factory/core'); const entityFactory = new EntityFactory({ blueprints: [UserBlueprint, PostBlueprint], });
We can generate a single entity using the factory and blueprints we defined.
await entityFactory .for('user') // get builder instance for 'user' .make() // generate a user without id
Use the factory make multple posts. By using "make" we can generate them without incrementing ids
await entityFactory .for('post') // get builder instance for 'user' .make(3) // generate 3 posts without id's
If "create" is called, the adapter will "persist" them which in the case of the object adapter means that it will generate id's.
// Create users with embedded posts await entityFactory .for('user') // get builder instance for 'user' .create(3) // generate 3 users with incrementing id's
Entities can also be generated with varying states. In this case lets use the 'with-posts' state for users to get a user with embedded posts.
// Create users with embedded posts await entityFactory .for('user') // get builder instance for 'user' .state('with-posts') // use 'with-posts' state transform .create() // generate user with incrementing id's
There are times as well when a blueprint may not be required but and we simply want to generate random one-off data. This can be accomplished using the "gen" method.
await entityFactory.gen(async ({ faker, factory }) => { return { name: faker.company.bsBuzz(), active: faker.random.boolean(), } });
Or genreate multiple arbitrary objects
await entityFactory.gen(3, async ({ faker, factory }) => { return { name: faker.company.bsBuzz(), active: faker.random.boolean(), } });
Nesting is supported
await entityFactory.gen(2, async ({ faker, factory }) => { return { name: faker.company.bsBuzz(), active: faker.random.boolean(), nested: await factory.gen(2, async({ faker, factory}) => { return { title: faker.company.bsBuzz(), description: faker.lorem.paragraphs(2), } }) } });
And so is using existing factory blueprints
await entityFactory.gen(2, async ({ faker, factory }) => { return { name: faker.company.bsBuzz(), active: faker.random.boolean(), posts: await factory.for('post').make(3), } });
Loading…

no comments

    sign in to comment