我正在尝试测试以下使用// m:\Shared is mapped to a shared folder. And it has permissions on the folder.
var tmp = @"m:\Shared\tmp.txt";
var target = @"m:\Shared\target.txt";
var backup = @"m:\Shared\backup10.txt";
File.Replace(tmp, target, backup); // Error!
在postgres数据库中进行查询的函数。我将无法对pg-promise
函数pg-promise
进行存根处理,以使其返回我定义的值,因此我可以编写测试以表明在返回某些数据时它将返回所述数据,并且在{{ 1}}遇到错误,它将发回该错误消息。
下面是一个示例函数
queries.js
db.one
这是一个示例测试
queries.test.js
db.one
当我得到未解决的回报时,我不认为我正确地选择了const pgp = require('pg-promise')({noLocking:true});
const config = {
...
};
const db = pgp(config);
function getFaculty(req, res, next) {
db.one('SELECT * FROM users WHERE first_name= $1', [req.query.firstName])
.then((data)=> {
let user = {
firstName: data.first_name,
lastName: data.last_name,
phoneNum: data.phone_number
}
return res.status(200).send(user)
})
.catch((err)=>{
console.log(err.message);
return next(err)
})
}
。
答案 0 :(得分:2)
这是单元测试解决方案:
queries.js
:
const pgp = require("pg-promise")({ noLocking: true });
const config = {};
const db = pgp(config);
function getFaculty(req, res, next) {
return db
.one("SELECT * FROM users WHERE first_name= $1", [req.query.firstName])
.then((data) => {
let user = {
firstName: data.first_name,
lastName: data.last_name,
phoneNum: data.phone_number,
};
return res.status(200).send(user);
})
.catch((err) => {
console.log(err.message);
return next(err);
});
}
exports.getFaculty = getFaculty;
exports.db = db;
queries.test.js
:
const { getFaculty, db } = require("./queries");
const sinon = require("sinon");
describe("queries", () => {
afterEach(() => {
sinon.restore();
});
it("should get faculty", async () => {
const mReq = { query: { firstName: "Lin" } };
const mRes = { status: sinon.stub().returnsThis(), send: sinon.stub() };
const mNext = sinon.stub();
const mData = { first_name: "Lin", last_name: "Du", phone_number: 123 };
const oneStub = sinon.stub(db, "one").resolves(mData);
await getFaculty(mReq, mRes, mNext);
sinon.assert.calledWith(mRes.status, 200);
sinon.assert.calledWith(mRes.send, { firstName: "Lin", lastName: "Du", phoneNum: 123 });
sinon.assert.calledWith(oneStub, "SELECT * FROM users WHERE first_name= $1", ["Lin"]);
});
it("should call error handler middleware", async () => {
const mReq = { query: { firstName: "Lin" } };
const mRes = { status: sinon.stub().returnsThis(), send: sinon.stub() };
const mNext = sinon.stub();
const mError = new Error("connect error");
const oneStub = sinon.stub(db, "one").rejects(mError);
await getFaculty(mReq, mRes, mNext);
sinon.assert.calledWith(mNext, mError);
sinon.assert.calledWith(oneStub, "SELECT * FROM users WHERE first_name= $1", ["Lin"]);
});
});
覆盖率100%的单元测试结果:
queries
✓ should get faculty
connect error
✓ should call error handler middleware
2 passing (11ms)
-----------------|----------|----------|----------|----------|-------------------|
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |
-----------------|----------|----------|----------|----------|-------------------|
All files | 100 | 100 | 100 | 100 | |
queries.js | 100 | 100 | 100 | 100 | |
queries.test.js | 100 | 100 | 100 | 100 | |
-----------------|----------|----------|----------|----------|-------------------|
源代码:https://github.com/mrdulin/mocha-chai-sinon-codelab/tree/master/src/stackoverflow/59062660