繁体   English   中英

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

[英]Testing database related code in NodeJS

使用PostgreSQL。

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

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

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

我正在使用Mocha进行测试。

我建议一个单独的测试数据库。 它可以很轻,你会想知道那里的数据(所以你可以测试它!)。 可以处理所有业务规则的基础数据集可以导出为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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM