在NodeJS中测试数据库相关的代码

 冭獭1314 发布于 2023-02-09 10:06

使用PostgreSQL.

我正在尝试为API设置适当的测试套件.到目前为止它可以工作,但测试是直接在主数据库上完成的.然后,我必须删除我的测试创建的所有内容,或者在这种情况下编辑.

我知道这是一件坏事(因为我可以忘记恢复变化,或搞乱序列).所以我想创建一个具有相同结构和基础数据的测试数据库,然后将其删除.这种方法在这种情况下是一个好的方法吗?

如果我想这样做,我应该怎么做?NodeJS中有没有办法执行SQL脚本?我尝试使用shell脚本,但到目前为止它已经完全混乱了权限,所以我认为使用NodeJS会更容易.

我正在使用Mocha进行测试.

1 个回答
  • 我建议一个单独的测试数据库.它可以很轻,你会想知道那里的数据(所以你可以测试它!).可以处理所有业务规则的基础数据集可以导出为SQL文件(或某种导出方法).

    通常,您的应用程序将与数据库建立连接,并且您的测试框架将有一些方法在测试开始之前运行方法.您可以在此指定测试数据库.您的数据库访问对象(DAO)或脚本,方法将以某种方式利用主连接,可以是方法参数,也可以是require语句等.

    例如,我正在使用knex模块连接到数据库并构建查询.我初始化并引用我们的文档中指定的单个数据库连接.

    var Knex = require( 'knex' );
    Knex.knex = Knex.initialize( {
      client : 'mysql',
      connection : {
      host : 'my.domain.com',
      user : 'dbrole',
      password : 'password',
      database : 'productiondb',
      charset : 'utf8'
      }
    } );
    

    我的DAO得到这样的连接:

    var knex = require('knex').knex;
    

    现在在我的单元测试中,在运行测试套件之前,我可以将我的连接设置为测试DB

    var Knex = require( 'knex' );
    Knex.knex = Knex.initialize( {
      client : 'mysql',
      connection : {
      host : '127.0.0.1',
      user : 'root',
      password : 'root',
      database : 'testdb',
      charset : 'utf8'
      }
    } );
    

    你有它!在测试和生产中使用完全相同的代码,并且您的生产数据库与测试分离.这种模式可以与很多框架一起使用,因此你必须适应(并且如果他们正在测试数据库,则清理测试,可能在所有测试完成后恢复到默认值).

    编辑:顺便说一句,knex与postgre一起使用,是一种在纯节点JS中构建查询的有趣方式.它还可以执行原始SQL.

    2023-02-09 10:10 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有