@HitGirl

Как правильно тестировать prisma?

Здравствуйте!
Нашёл гайд по тестированию ORM Prisma.

Написал следующий код:
import { Prisma } from '@prisma/client'
import { expect, test, vi } from 'vitest'
import prisma from '../src/__mocks__/prisma'
vi.mock('../src/libs/prisma')

test('createUser should return the generated user', async () => {
    const createUser = async (user: Prisma.UserCreateInput) => {
        return prisma.user.create({
            data: user,
        });
    }
    const newUser = { email: 'user@prisma.io', name: 'Prisma Fan' }
    prisma.user.create.mockResolvedValue({ ...newUser, id: 1 })
    const user = await createUser(newUser)
    expect(user).toStrictEqual({ ...newUser, id: 1 })

    prisma.user.findMany.mockResolvedValue([{ ...newUser, id: 1 }])
    const foundUser = await prisma.user.findMany({where: {id:3}})
    expect(foundUser).toStrictEqual([{ ...newUser, id: 1 }])
})


Данный тест выполняется успешно. Однако я не понимаю в чём смысл такого тестирования. Я просто передаю значение в mockResolvedValue и проверяю его же в toStrictEqual. Сами методы ORM не работают, что видно по строке findMany({where: {id:3}}). Можно как-то проверять сами методы ORM (создавать несколько тестовых записей в таблице, затем выполнять запрос, и проверять что он вернет)?
  • Вопрос задан
  • 115 просмотров
Пригласить эксперта
Ответы на вопрос 1
mimiseksimi
@mimiseksimi
В твоем текущем коде, вы только подменяете результаты вызовов методов ORM с помощью mockResolvedValue, и тестируете, что ваши обертки правильно обрабатывают эти результаты, вот примеры кода как можно тестировать, создание, удаление, обновление и чтение записей в бд:
Тест создания записи в базе данных:
test('createUser should create a new user in the database', async () => {
    const newUser = { email: 'user@prisma.io', name: 'Prisma Fan' };
    const createdUser = await prisma.user.create({
        data: newUser,
    });
    expect(createdUser).toBeDefined();
    expect(createdUser.email).toBe(newUser.email);
    expect(createdUser.name).toBe(newUser.name);
});


Тест чтения данных из базы данных:
test('findUserById should retrieve a user from the database', async () => {
    const userId = 1; 
    const foundUser = await prisma.user.findUnique({
        where: { id: userId },
    });
    expect(foundUser).toBeDefined();
    expect(foundUser.id).toBe(userId);
});


Тест обновления данных в базе данных:
test('updateUserName should update the user name in the database', async () => {
    const userId = 1; // предположим, что у вас есть запись с ID = 1
    const newName = 'Updated Name';
    const updatedUser = await prisma.user.update({
        where: { id: userId },
        data: { name: newName },
    });
    expect(updatedUser).toBeDefined();
    expect(updatedUser.name).toBe(newName);
});


Тест удаления данных из базы данных:
test('deleteUser should remove a user from the database', async () => {
    const userId = 1; 
    await prisma.user.delete({
        where: { id: userId },
    });
    const deletedUser = await prisma.user.findUnique({
        where: { id: userId },
    });
    expect(deletedUser).toBeNull(); 
});
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы