如何在Knexunit testing时模拟一个假数据库?
我一直使用Knex成功连接到后端数据库。 但是我想能够unit testing我的代码。 有没有办法模拟数据库连接?
我试过使用proxyquire,但我似乎无法得到它的工作。
问题似乎是Knex初始化的方式。
var knex = require('knex')({ client: 'mysql', connection: {} });
我设置knex在我的unit testing中被嘲笑。
myService = proxyquire('../app/myService', { 'knex': knexProxy });
我的服务包括knex。
var knex = require('knex').knex,
当我的服务运行查询时,它失败。
var sql = knex("table_name"); sql.insert(rowToInsert, "auto_increment_id"); sql.then(function (insertId) { resolve(); }, function (err) { reject(err); });
出于某种原因,我似乎无法捕捉请求,然后再尝试连接。
我也尝试创build一个自定义的Knex客户端 ,但是这还没有奏效。
我一直在使用内存中的Sqlite3数据库进行自动化testing,取得了巨大的成功。 这不是真正的unit testing,但它的运行速度比MySQL或PostgreSQL快得多。 我已经在另一个问题上公布了更多关于这个解决scheme的细节