Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+1 487новых вакансий за сутки·92 551вакансия открыта сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании7 220
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 402 кандидата открыты к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python17 105
  • Облачные технологии14 068
  • QA вакансии3 460
  • Backend вакансии2 098
  • Инженер данных1 796
  • Продакт-менеджер1 248

Разработка

  • Android1 866
  • iOS1 699
  • Fullstack вакансии979
  • AI вакансии951
  • Frontend вакансии742
  • Mobile вакансии44

По стеку

  • Go8 651
  • Java6 544
  • Node.js2 018
  • .NET1 719
  • Kotlin1 623
  • Rust1 453
  • C#709
  • PHP683
  • C++571

DevOps и инфраструктура

  • Kubernetes7 761
  • DevOps вакансии6 057
  • Linux-инфраструктура5 492
  • Terraform / IaC4 259
  • CI/CD3 240
  • Мониторинг и Observability1 782
  • SRE565
  • Кибербезопасность450

Аналитика и данные

  • Data Scientist1 127
  • Бизнес-аналитик925
  • Аналитик данных845
  • Системный аналитик154

Другие направления

  • Проджект-менеджер611
  • UI/UX дизайн145
  • Ручное тестирование14

По регионам

  • Вакансии в США43 685
  • Вакансии в Европе23 684
  • Вакансии в Канаде4 413
  • Работа в России3 909

По формату

  • Удалённые вакансии73 887
  • Релокация в США43 685
  • Гибридная работа12 392
  • Офисная работа7 088

По уровню

  • Senior вакансии42 236
  • Middle вакансии20 545
  • Junior вакансии6 653

Сейчас нанимают

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab138 вакансий
  • Celonis39 вакансий
  • Spotify36 вакансий
  • Adyen29 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace16 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме PrismaВсе вопросы
PrismaMiddleТеория

Как тестировать код, использующий Prisma? Какие стратегии мокирования доступны?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

Для unit-тестов используйте jest-mock-extended для мокирования Prisma Client; для интеграционных тестов — отдельную тестовую БД с prisma migrate deploy в beforeAll.

1. Мокирование с jest-mock-extended

Наиболее популярный подход для unit-тестов — создать мок всего Prisma Client:

// src/__mocks__/prisma.ts
import { PrismaClient } from '@prisma/client';
import { mockDeep, mockReset, DeepMockProxy } from 'jest-mock-extended';

export const prismaMock = mockDeep<PrismaClient>();

beforeEach(() => {
  mockReset(prismaMock);
});

// jest.setup.ts
jest.mock('../prisma', () => ({
  __esModule: true,
  prisma: prismaMock,
}));

В тесте используем типизированный мок:

// user.service.test.ts
import { prismaMock } from '../__mocks__/prisma';
import { createUser } from './user.service';

test('createUser сохраняет пользователя', async () => {
  const user = { id: 1, email: 'test@example.com', name: 'Alice' };
  prismaMock.user.create.mockResolvedValue(user);

  const result = await createUser({ email: 'test@example.com', name: 'Alice' });
  expect(result).toEqual(user);
  expect(prismaMock.user.create).toHaveBeenCalledWith({
    data: { email: 'test@example.com', name: 'Alice' },
  });
});

Стратегии тестирования кода с Prisma

Для тестирования кода, использующего Prisma, применяют три основных подхода: мокирование Prisma Client, использование тестовой базы данных с миграциями и использование in-memory/SQLite.

2. Тестовая база данных (интеграционные тесты)

Для интеграционных тестов используют отдельную БД (PostgreSQL или SQLite) и прогоняют миграции перед тестами:

// jest.integration.setup.ts
import { execSync } from 'child_process';
import { PrismaClient } from '@prisma/client';

const prisma = new PrismaClient();

beforeAll(async () => {
  // DATABASE_URL должен указывать на тестовую БД
  execSync('npx prisma migrate deploy', {
    env: { ...process.env, DATABASE_URL: process.env.TEST_DATABASE_URL },
  });
});

afterEach(async () => {
  // Очищаем таблицы между тестами
  await prisma.user.deleteMany();
  await prisma.post.deleteMany();
});

afterAll(async () => {
  await prisma.$disconnect();
});

3. SQLite для быстрых интеграционных тестов

Если схема совместима, можно использовать SQLite вместо PostgreSQL — это быстрее в CI:

# .env.test
DATABASE_URL="file:./test.db"
DATABASE_URL="file:./test.db" npx prisma migrate deploy
DATABASE_URL="file:./test.db" npx jest

4. Singleton-паттерн для Prisma Client

Чтобы избежать множества открытых соединений в тестах, используют singleton:

// src/prisma.ts
import { PrismaClient } from '@prisma/client';

const globalForPrisma = global as unknown as { prisma: PrismaClient };

export const prisma =
  globalForPrisma.prisma ||
  new PrismaClient({ log: ['error'] });

if (process.env.NODE_ENV !== 'production') {
  globalForPrisma.prisma = prisma;
}

Подводные камни

  • Не забывайте вызывать mockReset в beforeEach — иначе моки из предыдущего теста просочатся в следующий.
  • Мок Prisma Client не проверяет реальные SQL-ограничения (UNIQUE, FK) — интеграционные тесты обязательны для критических путей.
  • При использовании SQLite учитывайте несовместимость с PostgreSQL-специфичными типами (jsonb, uuid, enum).
  • Миграции в CI должны применяться к чистой тестовой БД, иначе флакообразные ошибки «relation already exists».
  • После изменения схемы обязательно перегенерировать Prisma Client (npx prisma generate), иначе типы в моках устареют.
  • Не вызывайте prisma.$disconnect() между тестами — только в afterAll, иначе connection pool исчерпается.
  • Очистка данных через deleteMany медленнее TRUNCATE ... CASCADE; в больших схемах используйте raw-запрос.
  • В jest-mock-extended мок транзакций (prisma.$transaction) требует отдельной настройки — не будет работать по умолчанию.

Частые вопросы на собеседовании

  • Как Prisma Client обеспечивает типобезопасность? Как генерируются типы?
  • Что такое транзакции в Prisma? Как использовать prisma.$transaction() для интерактивных и batch-транзакций?
  • Что такое Prisma Migrate? Чем отличаются prisma migrate dev и prisma migrate deploy?
  • Как определить связи один-к-одному, один-ко-многим и многие-ко-многим в Prisma?

Типичные ошибки

  • Путает Prisma Client API с гарантиями базы данных: индексы, блокировки и isolation level не создаются магически.
  • Не объясняет, где в lifecycle находится тестирование кода с Prisma.
  • Не разделяет validation, authorization, business logic и persistence.
  • Игнорирует ошибки, лимиты входных данных, observability и тестирование.

Что проверяет интервьюер

  • Может объяснить тестирование кода с Prisma на примере кода.
  • Называет ключевые API: test database, mock PrismaClient.
  • Отделяет ORM/query builder поведение от реального поведения СУБД.
  • Видит production-риски: безопасность, отказоустойчивость, логирование и тесты.

Как вы знаете этот вопрос?

Проверить себя по теме Prisma →

Источники

  • https://www.prisma.io/docs/orm/prisma-client/testing

Связанные темы

Prismadatabase-designtesting