我一直在使用 Knex成功连接到后端数据库。但我希望能够对我的代码进行单元测试。有没有办法模拟数据库连接?
我试过使用 proxyquire但我似乎无法让它工作。
问题似乎出在 Knex 的初始化方式上。
var knex = require('knex')({
client: 'mysql',
connection: {}
});
我将 knex 设置为在我的单元测试中被模拟。
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);
});
出于某种原因,我似乎无法在尝试连接之前捕获请求。
我也曾尝试创建一个 custom Knex Client ,但这也没有奏效。
最佳答案
使用 jest :
在您的应用程序根目录中创建文件 /__mocks__/knex.js
:
module.exports = () => ({
select: jest.fn().mockReturnThis(),
from: jest.fn().mockReturnThis(),
where: jest.fn().mockReturnThis(),
first: jest.fn().mockReturnThis(),
then: jest.fn(function (done) {
done(null)
})
})
将所需的返回值传递给done
关于javascript - 当针对 Knex 进行单元测试时,如何模拟假数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28165063/