我应该如何进行异步单元测试?
how should i do asynchronous unit testing?
我正在使用 pg-promise。我是学习者,如果这对你来说似乎微不足道,请原谅。我如何编写单元测试。它错误数据未定义。我一直在 js 文件中建立连接并导出 module.another js 文件用于查询数据库和获取结果集。代码按预期工作有问题如何使用 mocha 和 chai 编写单元测试。
test1.js
var dbConn= pgp(connUrl);
module.exports = {
getconnect: function () {
return dbConn;
}
};
test2.js
module.exports = {
getData: function (req, res) {
db.getconnect().query(sqlStr, true)
.then(function (data) {
console.log("DATA:", data);
return data;
} } }
unittest.js
describe("Test Cases", function (done) {
it('retrieve response', function (done) {
var req = {};
var res = {};
test2.getData(req, res);
// how would i retrieve value of data from test2.js so i can test
done();
});
});
我如何在 unittest.js
中从 test2.js 中检索 "data" 值
你的 getData
必须 return 承诺。客户端代码将能够识别它完成的那一刻(已解决)。
module.exports = {
getData: function (req, res) {
return db.getconnect().query(sqlStr, true)
.then(function (data) {
console.log("DATA:", data);
return data;
} } }
测试:
describe("Test Cases", function () {
it('retrieve response', function (done) {
var req = {};
var res = {};
test2.getData(req, res).then(function(data){
// test of data returned
done(); // finish test
}).catch(done);// report about error happened
});
});
如果您不需要在您的模块中处理任何数据,您可以删除整个 .then
部分而不更改任何功能。
但是如果你想预处理数据——不要忘记从每个链接的 .then
.
中 return 它
如果您的测试库需要存根来处理异步内容,您可以使用 async/await
功能来处理它。
it('retrieve response', async function(){
try {
var data = await test2.getData(req, res);
// test data here
} catch (e) {
// trigger test failed here
}
});
或者存根,像这样:
var dbStub = sinon.stub(db, 'getConnect');
dbStub.yields(null, {query: function(){/*...*/}});
如果您有一个返回 promise 的函数,那么您可以在测试中使用 await
:
describe("Test Cases", function (done) {
it('retrieve response', async function (done) {
try {
var data = await test2.getData();
// check data constraints ...
...
} catch(err) {
...
}
done(); // finish test
});
});
我正在使用 pg-promise。我是学习者,如果这对你来说似乎微不足道,请原谅。我如何编写单元测试。它错误数据未定义。我一直在 js 文件中建立连接并导出 module.another js 文件用于查询数据库和获取结果集。代码按预期工作有问题如何使用 mocha 和 chai 编写单元测试。
test1.js
var dbConn= pgp(connUrl);
module.exports = {
getconnect: function () {
return dbConn;
}
};
test2.js
module.exports = {
getData: function (req, res) {
db.getconnect().query(sqlStr, true)
.then(function (data) {
console.log("DATA:", data);
return data;
} } }
unittest.js
describe("Test Cases", function (done) {
it('retrieve response', function (done) {
var req = {};
var res = {};
test2.getData(req, res);
// how would i retrieve value of data from test2.js so i can test
done();
});
});
我如何在 unittest.js
中从 test2.js 中检索 "data" 值你的 getData
必须 return 承诺。客户端代码将能够识别它完成的那一刻(已解决)。
module.exports = {
getData: function (req, res) {
return db.getconnect().query(sqlStr, true)
.then(function (data) {
console.log("DATA:", data);
return data;
} } }
测试:
describe("Test Cases", function () {
it('retrieve response', function (done) {
var req = {};
var res = {};
test2.getData(req, res).then(function(data){
// test of data returned
done(); // finish test
}).catch(done);// report about error happened
});
});
如果您不需要在您的模块中处理任何数据,您可以删除整个 .then
部分而不更改任何功能。
但是如果你想预处理数据——不要忘记从每个链接的 .then
.
如果您的测试库需要存根来处理异步内容,您可以使用 async/await
功能来处理它。
it('retrieve response', async function(){
try {
var data = await test2.getData(req, res);
// test data here
} catch (e) {
// trigger test failed here
}
});
或者存根,像这样:
var dbStub = sinon.stub(db, 'getConnect');
dbStub.yields(null, {query: function(){/*...*/}});
如果您有一个返回 promise 的函数,那么您可以在测试中使用 await
:
describe("Test Cases", function (done) {
it('retrieve response', async function (done) {
try {
var data = await test2.getData();
// check data constraints ...
...
} catch(err) {
...
}
done(); // finish test
});
});