我应该如何利用Neo4j数据库对nodeJs API进行自动化测试

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我应该如何利用Neo4j数据库对nodeJs API进行自动化测试相关的知识,希望对你有一定的参考价值。

我目前正在开发几个利用Neo4J数据库的NodeJS API。我想在每个端点上进行自动化测试并确保一切正常(例如:POST用户应该在我的图形中使用预期的标签和属性创建节点用户)

作为一名初级开发人员我不确定从哪里开始。

我最初的想法是设置一个灯具Neo4j数据库(通过在void图上执行一个长密码查询来生成灯具数据)问题是这个灯具数据库会受到我做的不同测试的影响。对于Instance,如果我想测试DELETE端点,我将声明数据将被删除我的数据库。

我看到两个解决方案:

  • 在测试端点之前,我会生成一些所需的数据。但是我必须确保在测试后删除它们以不损害灯具并影响其他端点测试。
  • 在测试端点之前,我清理数据库,执行fixtures查询,然后执行第二个查询以添加一些额外的数据来测试我的端点。然后,对于每个端点,我肯定有一个干净的数据库,最终有一些额外的数据。

第一种解决方案似乎费力/耗时,而第二种解决方案似乎有点粗糙。也许我对自动化测试的概念确实是错误的。

以下是我所做的测试示例(使用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来维护这种结构。此外,我担心这种测试端点的方式会花费太多时间,因为我必须在每次端点测试之前和之后编写特定的函数/查询。

如果我的问题看起来很开放,我很抱歉,我非常好奇有经验的开发人员如何处理端点自动化测试。

答案

为确保来自一个测试的意外更改不会影响另一个测试,您应该在每次测试后完全清空DB,并在每次测试之前创建适当的夹具。这不仅可以确保您使用所期望的数据进行测试,而且还可以使实施测试变得更加容易。

以上是关于我应该如何利用Neo4j数据库对nodeJs API进行自动化测试的主要内容,如果未能解决你的问题,请参考以下文章

NODEJS+NEO4J实现把NEO4J中的查询数据转化为D3 JSON数据以方便D3展示

如何在 NodeJS 上验证 AWS Cognito 访问令牌

利用Apach ab对nodejs进行并发负载的压力测试

利用Apach ab对nodejs进行并发负载的压力测试

Neo4j:如何添加绽放?

Neo4j - 图形数据科学库 - 如何对图形目录中的命名图形进行密码查询?