使用 SQLite3 进行单元测试

dkn*_*ack 4 sqlite node.js sequelize.js bookshelf.js knex.js

我正在编写单元测试并在他的内存模式下使用 SQLite3。

我这样做是因为我需要为每个测试创建一个新数据库,以便我可以并行运行测试而不会相互影响。

但是,当然,随着我进行的测试越多,这会变得越来越慢。

我可以用 sqlite3 做任何优化吗,另一个更好的工作流程(例如一个好的模拟库)或另一个解决方案可以解决这个问题吗?我需要运行原始查询。

目前我使用 knexjs 但这与几乎所有数据访问库有关。

k0p*_*kus 7

您不需要对数据库运行原始查询。

在单元测试的范围内,您可以假设您的持久层有效,即它能够更新插入和删除。

在编写单元测试时,模拟你的数据库连接。关于单元测试,针对数据库执行查询并不重要,重要的是您的业务逻辑在获取某些输入时以特定方式运行。(这也可能意味着让您的模拟数据库连接抛出异常以确保您的应用程序以故障安全方式运行。)

无论环境如何(本地、暂存甚至生产),让集成测试实际运行对测试数据库的查询都是有价值的。

然而,根据定义,这些更慢且更难设置,并且只能在一定程度上并行化。(如果您过分依赖它们,您的测试设置类似于冰锥而不是金字塔。)

它们对于关键业务功能(例如购物车点击)仍然有意义。但是,如果您的重点是编写单元测试,请确保对应用程序进行单元测试,而不是对持久层进行单元测试。