[英]NodeJS unit testing of database routines using callbacks
Here is the problem: I have class WPSManager, which is exported as a module: 这是问题所在:我有WPSManager类,该类作为模块导出:
function WPSManager(dbclient) { var databaseclient = dbclient; this.getWrappers = function(excludeid, callback) { var query = "SELECT * FROM public.wps_methods WHERE id <> " + excludeid + " AND id > 88;"; databaseclient.query(query, function(error, rows, fields) { callback(rows.rows); }); } //end getWrappers() } //end class module.exports = WPSManager;
How can I test results of the query? 如何测试查询结果? I've tried variant with nodeunit (providing assertions in callback for getWrappers()
), also the variant with mocha (example below). 我尝试了使用nodeunit的变体(在getWrappers()
回调中提供断言),也尝试了带有mocha的变体(下面的示例)。 All of them are not making any assertions in the callback that I provide. 他们都没有在我提供的回调中做出任何断言。
delete require.cache; var assert = require("assert"); var pg = require("pg"); var WPSManager = require("./WPSManager"); /** * Database client initiation. */ var dbclient = new pg.Client("***"); dbclient.connect(); describe('WPSManager', function(){ describe('getWrappers()', function(){ it('should return list of wrappers', function(){ var wpsmanager = new WPSManager(dbclient); wpsmanager.getWrappers(14, function(data) { // This assertion is not performed assert.equal(5, data.length); done(); }); }) }) });
So, here is the question - do any of unit testing tools for NodeJS can solve this question, or only thing that is available - using assert() ? 所以,这是一个问题-NodeJS的任何单元测试工具都可以解决这个问题,或者只有可用的东西-使用assert()吗? Assert is great, but it is not so fancy:) 断言虽然很棒,但并不那么花哨:)
Using jasmine-node (2.0.0) I would something like the below. 使用茉莉花节点(2.0.0),我会像下面这样。 I mocked your DB, but it should work with the real thing too. 我嘲笑了您的数据库,但是它也应该与真实的东西一起工作。
function WPSManager(dbclient) {
var databaseclient = dbclient;
this.getWrappers = function(excludeid, callback) {
var query = "SELECT * FROM public.wps_methods WHERE id <> " + excludeid + " AND id > 88;";
databaseclient.query(query, function(error, rows, fields) {
callback(rows.rows);
});
} //end getWrappers()
} //end class
var dbclient = {
query : function ( query, callback ) {
setTimeout( function () {
callback( null, { rows:Array(5) }, null );
}, 500);
}
};
//var dbclient = mockDB;
//var dbclient = new pg.Client("***");
//dbclient.connect();
describe('WPSManager', function(){
describe('getWrappers()', function(){
it('should return list of wrappers', function (done) {
var wpsmanager = new WPSManager(dbclient);
wpsmanager.getWrappers(14, function(data) {
expect(data.length).toBe(5);
done();
});
});
});
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.