Introducción
En muchas ocasiones necesitamos generar datos ficticios para probar nuestro desarrollo o llenar nuestra base de datos de pruebas. La creación manual de estos datos puede resultar tediosa y llevar mucho tiempo. En este artículo, hablaremos sobre cómo automatizar el proceso de generación de datos ficticios utilizando TypeORM.
Para empezar es necesaria la instalación de una extensión adicional ya que TypeORM por si solo no cuenta con una opción para generar datos ficticios.
npm install --save @nestjs/typeorm typeorm typeorm-extension
Adicional a esto se requiere la instalación de un driver de conexión a la base de datos.
npm install pg --save
En este caso se usará PosgreSQL por lo que realizamos la instalación del controlador recomendado por TypeORM en su sitio.
Para este ejemplo se tendrán dos entidades hipotéticas user
y post
.
Por último se hace la instalación de dependencias necesarias para la ejecución del código.
npm install --save @nestjs/config @types/bcrypt bcrypt
Para el ejemplo se plantea la siguiente estructura de carpetas.
Definiendo un Factory
Un factory es una función que nos sirve para establecer una estructura u objeto con datos aleatorios ficticios en tiempo de ejecución. Con el uso de Faker podemos generar nombres, direcciones, números de teléfono, correos electrónicos y muchos otros tipos de datos ficticios.
En la definición de nuestro Factory se cuenta con una instancia de la librería Faker para generar datos aleatorios.
Por ejemplo, el archivo user.factory.ts
contendría.
Se puede encontrar más información acerca de Faker y sus características en fakerjs.dev.
Semilla o Seed
A través de un seed o semilla se puede generar un set de datos aleatorios, para ello se hace uso de una clase seeder que se apoya de un Factory para la creación de datos.
Lo podemos ver en el archivo user.seeder.ts
.
En el caso de la entidad post existe una relación que requiere de un usuario en la base de datos, por lo que se hace uso de un dato conocido para agregar esta relación, el archivo post.seeder.ts
sería el siguiente.
Para poder tener un mejor control de la ejecución del sets es importante definir un punto de entrada, el cual tiene el nombre init.seeder.ts
por convención y será llamado en las configuraciones de TypeORM.
Configuración de TypeORM
Para este ejemplo se define un archivo typeorm.config.ts
en el que se hace uso de las entidades, migraciones y seeds.
Esta configuración requiere de las variables de entorno por lo que se hace uso del ConfigModule
.
En el archivo .env
se deben actualizar las variables para la conexión a la base de datos.
DATABASE_HOST=localhost
DATABASE_PORT=5432
DATABASE_USERNAME=postgres
DATABASE_PASSWORD=root
DATABASE_DATABASE=test
Ejecución
Para ejecutar las migraciones y generación de datos aleatorios se agregan las configuraciones requeridas en el archivo package.json
:
"scripts": {
...
"typeorm": "ts-node -r tsconfig-paths/register node_modules/typeorm/cli.js -d database/config/typeorm.config.ts",
"mig-gen": "npm run typeorm migration:generate -- ",
"mig-run": "npm run typeorm migration:run",
"mig-rev": "npm run typeorm migration:revert",
"seed": "ts-node -r tsconfig-paths/register node_modules/typeorm-extension/dist/cli/index.js seed -d database/config/typeorm.config.ts"
},
Para iniciar ejecutamos el comando migration:generate
a través del atajo que se acaba de ingresar.
npm run mig-gen -- database/migrations/init
Una vez creado el archivo con la migración inicial, corremos esta migración con el atajo de migration:run
.
npm run mig-run
Por último ejecutamos la semilla con el comando seed
.
npm run seed
Esto generaría un set de datos aleatorios con en la base de datos con el que podemos probar la aplicación.
El código completo de este ejemplo se encuentra publicado en github si desea descargarlo.
ManuelGil / nest-typeorm-seed-example
This is a example of seeding with TypeOrm and NestJS
A progressive Node.js framework for building efficient and scalable server-side applications.
Description
Nest framework TypeScript starter repository.
Installation
$ npm install
Running the app
# development
$ npm run start
# watch mode
$ npm run start:dev
# production mode
$ npm run start:prod
Test
# unit tests
$ npm run test
# e2e tests
$ npm run test:e2e
# test coverage
$ npm run test:cov
Support
Nest is an MIT-licensed open source project. It can grow thanks to the sponsors and support by the amazing backers. If you'd like to join them, please read more here.
Stay in touch
- Author - Kamil Myśliwiec
- Website - https://nestjs.com
- Twitter - @nestframework
License
Nest is MIT licensed.
Conclusión
La generación de datos ficticios es una parte importante del desarrollo de aplicaciones. Utilizando Seed, Factory y Faker podemos automatizar este proceso y ahorrar mucho tiempo. Con estos tres elementos se puede generar grandes cantidades de datos ficticios de forma rápida y eficiente.
Top comments (5)
Excelent work! BUT all this change in the verion 3.0.1 of the typeorm-extension
Thank you for your comment! I will review the new changes and update the post.
use 2.8.x, works for me at latest nestjs version
Excelente guia, me sirvio bastante ya que estoy empezando con este framework
I have this error.
No changes in database schema were found - cannot generate a migration. To create a new empty migration use "typeorm migration:create" command