Emmanuel Rodríguez
Geovanni Atavales Quiroga
Elizabeth Daniela Rodriguez Ubaldo
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
Si usan un ID único, recuerden hacerlo auto incrementable en la BDD, en caso contrario deberán añadir como parámetro el ID y su respectivo valor.
it("Actualizar para comprobar", function () {
cy.task("queryDb", UPDATE Usuario.usuarios Set nombre='Elizabeth', Apellidos='Romero', Edad=30, Celular=986346544 WHERE idusuarios= ${this.ID}).then((result) => {
cy.log(result)
expect(result.affectedRows).to.eq(1)
});
});