如何在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的细节