No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Probar con bases de Datos SQL

12/17
Recursos

Aportes 3

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

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)
});
});