Probando DB por instancia
.
Tomando como inspiración 🔗 Pruebas de integración de Prisma ORM. Podemos genera una instancia de docker para nuestro propósito o, en cuyo caso, automatizar la conexión para que apunte a una base de datos alternativa.
.
Nota. Evitar lanzar pruebas unitarias directas a la base de datos, para ello generar mocks de la capa o, en su defecto, descentralizar su uso por entorno.
.
De la sesión anterior, podemos retomar la configuración de Cypress en su archivo de configuración cypress.config
:
import {defineConfig} from 'cypress'
import Prisma from './src/libs/Prisma'
export default defineConfig({
e2e: {
baseUrl: 'URL',
setupNodeEvents(on, _) {
on('task', {
create: async ({model, query}) => {
const client = new Prisma(model)
return await client.create(query)
},
findUnique: async ({model, query}) => {
const client = new Prisma(model)
return await client.findUnique(query)
},
deleteMany: async ({model, query}) => {
const client = new Prisma(model)
return await client.deleteMany(query)
}
})
}
}
})
En ella, generamos diferentes proceso que utilizaremos en nuestra prueba.
.
Como estaremos ejecutando y limpiando nuestra base de datos o mediante la recreación de instancia utilizamos el comando exec
para levantar y eliminar una instancia.
.
Para ello, ocuparemos los hooks before
(antes que todas las pruebas una vez) y after
(después que todas las pruebas una vez).
interface IPost {
title: string
text: string
author: string
}
const postSchema = (post: IPost) => {
expect(post).to.be.an('object')
expect(post).to.have.property('title')
expect(post).to.have.property('text')
expect(post).to.have.property('author')
}
describe("Testing Prisma", () => {
before(function () {
cy.fixture('post').then((post) => this.post = post)
})
after(function () {
cy.task("deleteMany", {model: 'post', query: {}})
})
it("should create a post", function () {
cy.task("create", {model: 'post', query: {data: this.post}})
.then((result: any) => postSchema(result));
});
it("should find a posts", function () {
cy.task("findUnique", {model: 'post', query: {where: {id: 1}}})
.then((result: any) => postSchema(result));
});
});
De aquí, considere apuntar a otra base de datos o levantar una instancia de base de datos mediante Docker
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?