@700ghz

Как правильно заполнять БД при тестировании API?

Я пишу тесты для моего API.

Вот здесь я тестирую POST /users/:userId/item:
it('should add item to user', async () => {
  await myTestsHelper.cleanDb();

  // создаю юзера в БД. Мой вопрос про вот эту функцию :) 
  const user = await myTestsHelper.factories.createSomeUser();

  // вызываю тестируемый эндпоинт
  await request.post(`/users/$(user.id)/item`)
  .expect(200);
  // and expect bla bla bla ... Тут все понятно :) 
})


Что должно быть внутри функции myTestsHelper.factories.createSomeUser?
Дело в том, что создание юзера в моей системе это "магические вычисления" и заполнение кучи таблиц (user, billing, settings, images). Функционал создания юзера лежит в моем эндпоинте POST /user

Я вижу три пути реализации myTestsHelper.factories.createSomeUser:
  1. http запрос к POST /user (самый способ)
  2. добавление записей в таблицы (как бы эмуляция результата работы POST /user) (усложнение кода тестов, сложно поддерживать)
  3. попытаться выдрать из эндпонта POST /user функцию addUser и дергать ее в тестах
    (что?? ради теста менять структуру приложения, выдирать функцию??)


Все три способа будут работать. Но как правильно? 1 вариант годный?

Заранее благодарю!

P.S. nodejs, expressjs, mocha, tdd
  • Вопрос задан
  • 310 просмотров
Решения вопроса 1
Maksclub
@Maksclub
maksfedorov.ru
Какого уровня тесты?
  • если интеграционный тест -- посмотреть в БД запись, на этом уровне тестирования вы работаете с разными участками системы и их взаимодействие (БД как раз является частью системы)
  • если приемочный -- посмотреть ответ по  GET, тк на этом уровне уже все должно работать как черный ящик, вы просто работаете с системой и смотрите результат ее работы (как человек, как браузер и т.д..)


3 пункт конечно не делать!
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
10 дек. 2022, в 11:58
300 руб./за проект
10 дек. 2022, в 11:34
20000 руб./за проект
10 дек. 2022, в 10:41
5000 руб./за проект