@ekifox
Пора идти спать

Как решить множественные вопросы по тестированию в NestJS?

Привет всем, пытаюсь сейчас написать первые тесты в своей жизни)
Из этого появилось много вопросов:

1) У меня есть большой сервис, который взаимодействует напрямую с репозиториями из других компонентов.
Is it ok? если нет, то как лучше?

2) Когда хотел написать unit test для одного большого метода в этом сервисе, столкнулся с проблемой мокинга репозиториев. У меня есть специфичные запросы вроде:
await this.otherComponentRepository.findOne({
    where: { message: Raw((alias) => `${alias} ILIKE '${code}'`) },
    lock: { mode: 'pessimistic_write' }
})

Просто так замокать findOne не получится, ниже он используется еще раз, но уже с другим FindOptions.
Нормально ли будет, если я для каждого такого findOne закину в OtherComponentRepository отдельную функцию, чтобы ее можно было замокать? Назову ее например findOneByMessageWithLock. Есть ли другие варианты? Как это делаете вы?

3) Дополняя 2й вопрос: подозреваю, что такие вещи вообще нужно закидывать не в репозиторий, а в сервис (кстати, почему так делают? зачем findOneByMessageWithLock в сервисе, если можно в репозитории).

4) Если нужно в сервис, то как жить с огромным количеством мелких функций вроде findOneByMessageWithLock в сервисе и при этом еще иметь огромные функции с огромным flow бизнес-логики.

5) Есть ли какой-то материал на habr/medium где все такие глупые вопросы уже решены? Есть ли репозиторий с нормальными примерами тестов на nest и typeorm, где не калькулятор тестируется.

6) Что делать, если мне в одном тесте нужно, чтобы findOneByMessageWithLock вернул одну запись, а в другом другую? Как подменять моки между тестами?

7) Стоит ли тратить время на юнит-тесты или проще сразу e2e? Хочется покрыть код тестами быстрее, о TDD в момент написания бекенда я даже не задумывался.

8) Jest проводит много e2e-тестов одновременно, как шарить между ними одну базу? Ведь нужно, чтобы тесты были независимы друг от друга.
  • Вопрос задан
  • 176 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

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