【发布时间】:2021-05-02 13:35:13
【问题描述】:
我有一个函数,我正在执行一些数据库操作。喜欢,
const { Pool } = require("pg");
const pool = new Pool({
connectionString: `some connection string...`,
});
var fun = async function (pk_name, pk_value) {
try {
const db = await pool.connect();
const query = `SELECT *
FROM creds
WHERE ${pk_name} = $1`;
var res = await db.query(query, [pk_value]);
db.release();
return res.rows;
} catch (ex) {
return [];
}
};
module.exports.isValidUser = async function (pk_name, pk_value, password) {
try {
var userData = await fun(pk_name, pk_value);
return userData[0].email === pk_value && userData[0].password === password;
} catch (ex) {
return false;
}
};
我正在尝试模拟上述方法,例如 pool.connect() 、db.query() 和 db.release()
所以,我尝试了以下事情
var sinon = require("sinon");
var assert = sinon.assert;
const { Pool } = require("pg");
const pool = new Pool()
var databaseControllerTestPositive = function () {
it("valid user check test", async function () {
sinon.stub(logUtils, "info");
sinon.stub(pool, 'connect')
sinon.stub(pool, 'query').returns({
email: "demo@gmail.com",
password: "demo"
})
sinon.stub(pool.prototype.connect, "release");
// isValidUser is another function which calls the above fun() internally.
var result = await dbUtils.isValidUser(
"fake_pk_name",
"fake_pk_value",
"pass"
);
assert.match(result, { rows: [] });
});
};
但是,上面的测试失败了,我试图模拟的方法并没有真正被模拟。
我找到了一个类似的question,但我没有发现它的答案很有帮助。
如果我做错了什么,谁能帮助我。
【问题讨论】:
标签: node.js unit-testing mocking mocha.js sinon