Как мне делать свои автоматические тесты API-интерфейсов nodeJs, использующих базу данных Neo4j - PullRequest
0 голосов
/ 04 октября 2018

В настоящее время я работаю над несколькими API-интерфейсами NodeJS, которые используют базу данных Neo4J.Я хочу сделать автоматические тесты на каждой конечной точке и убедиться, что все работает (например: POST пользователь должен создать пользователя узла на моем графике с ожидаемыми метками и свойствами)

Как младший разработчик, я не совсем уверен, гдедля начала.

Моя первоначальная идея состоит в том, чтобы создать базу данных Neo4j для фикстур (путем выполнения длинного запроса шифра на пустом графе, который будет генерировать данные фикстур). Проблема в том, что эта база данных фикстур будет зависеть от различныхтесты я делаю.Например, если я хочу протестировать конечную точку DELETE, я буду утверждать, что данные будут удалены из моей базы данных.

Я вижу два решения для этого:

  • Перед тестированиемконечной точкой я генерирую некоторые необходимые данные.Но тогда мне придется обязательно удалить их после теста, чтобы не ухудшить фикстуры и не повлиять на другие тесты конечных точек.

  • Перед тестированием конечной точки я очищаю базу данных, выполняю запрос фикстури выполните второй запрос, чтобы добавить дополнительные данные для проверки моей конечной точки.Тогда для каждой конечной точки обязательно должна быть чистая база данных с некоторыми дополнительными данными.

Первое решение кажется трудоемким / трудоемким, а второе - немного грубым.Возможно, моя концепция автоматизированных тестов действительно неверна.

Вот пример теста, который я провел (используя mochajs и chai), где я меняю администратора организации:

    describe('UPDATE organisation', () => {
    before((doneBefore) => {
      const admin1 = updateOrganisationUtilities.createAdmin('admin@test.com');
      const admin2 = updateOrganisationUtilities.createAdmin('admin2@test.com');
      Promise.all([admin1, admin2]).then(
        (admins) => {
          idAdmin = admins[0].id;
          idAdmin2 = admins[1].id;
          updateOrganisationUtilities.bindAdminToOrganisation(idAdmin, idOrganisation)
            .then(() => {
              doneBefore();
            });
        });
    });
    after((doneAfter) => {
      Promise.all([
        updateOrganisationUtilities.deleteExtraData(),
      ]).then(() => {
        doneAfter();
      });
    });
    it('Should update an organisation', (doneIt) => {
      const req = {
        method: 'PUT',
        url: `/organisations/${idOrganisation}`,
        payload: JSON.stringify({
          name: 'organisation-test',
          address: 'here',
          trainingNumber: '15',
          type: 'organisation.types.university',
          expirationDate: new Date(),
          idAdmin: idAdmin2,
        }),
        headers: {
          authorization: token,
        },
      };
      server.inject(req, (res) => {
        assert.equal(res.statusCode, 200);
        assert.exists(res.result.id);
        assert.equal(res.result.address, 'here');
        assert.equal(res.result.trainingNumber, '15');
        assert.equal(res.result.type, 'organisation.types.university');
        updateOrganisationUtilities.getLinkBetweenAdminAndOrga(res.result.id, idAdmin2)
          .then((link) => {
            assert.include(link, 'IS_ADMIN');
            assert.include(link, 'ROLE');
            doneIt();
          });
      });
    });
  });

Как вы можете видеть:

  • Я создаю некоторые полезные дополнительные данные в before ()
  • Я удаляю дополнительные данные в after ()
  • Метод updateOrganisationUtilities.getLinkBetweenAdminAndOrga() проверьте, правильно ли применены изменения в Neo4j.

Кажется, это работает, но я боюсь, что это будет PITA для поддержания такой структуры, когда у меня будут сотни тестов, которые могутизменить базу данных.Более того, я боюсь отнимать слишком много времени при таком способе тестирования моих конечных точек, поскольку мне приходится писать конкретные функции / запросы до и после каждого теста конечной точки.

Извините, если мой вопрос кажется широко открытым, но мне очень любопытноо том, как опытные разработчики имеют дело с автоматизированными тестами конечных точек.

1 Ответ

0 голосов
/ 04 октября 2018

Чтобы непредвиденные изменения из одного теста не повлияли на другой тест, вы должны полностью очищать БД после каждого теста и создавать соответствующий прибор перед каждым тестом.Это не только гарантирует, что вы проводите тестирование с ожидаемыми данными, но и облегчит выполнение тестов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...