Раздел 43 · Автотестирование с нуля

Testcontainers: настоящий Postgres в тесте

middle~35 мин

без входаВойди, чтобы отмечать прогресс, вести заметки и решать задачи в редакторе. войти

Тимур · бэкенд, #qa-antrakt

Две новости. Ручка /admin/events/last-orders на стенде отвечает 500, хотя тесты репозитория зелёные. А отчёт Саввы про «Ночь продаж» показал ноль заказов за первые 15 минут, и это тоже прошло тесты. Тесты репозитория гоняются на SQLite в памяти: быстро, без Docker, в CI ничего поднимать не надо. Зачем мне Postgres в тестах, если SQL везде один?

Вера Ланская · лид QA, #qa-antrakt

SQL не везде один. Покажи Тимуру, где SQLite ему соврал, и подними в тестах ту же базу, что на стенде.

В прошлом уроке ты наполнял базу данными и откатывал транзакцию после каждого теста. А в уроке 64 вынес запросы в отдельный слой. Остался вопрос, который мы обходили: откуда в тесте берётся сама база. У Глеба ответ был простой: sqlite3.connect(":memory:"). Сегодня разберём, почему он стоил двух багов, и заменим его настоящим Postgres в контейнере.

Репетиция на чужой сцене

Труппа театра на Литейном едет на гастроли. Репетирует она дома: сцена 12 метров, оркестровая яма у самого края. На гастролях сцена 9 метров. Танцор, который дома делал три шага до края, на премьере делает третий шаг в яму.

Репетиция была честной, только сцена не та. Тест на SQLite устроен так же: код честно проверяется, но на другой базе. Где базы совпадают, тест полезен. Где расходятся, он молчит, а иногда уверенно зеленеет на коде, который на проде не работает вовсе.

урок из курса

Урок из курса «Автотестирование с нуля». Курс покупается один раз и остаётся навсегда: 500 ₽.

Оплата пока не подключена: премиум и курсы открываются промокодом.