0

这是问题所在:我有 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;

如何测试查询的结果?我已经尝试过使用nodeunit的变体(在回调中提供断言getWrappers()),也尝试过使用mocha的变体(下面的示例)。他们都没有在我提供的回调中做出任何断言。

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();
	  });	
    })
  })
});

所以,这里有一个问题——NodeJS 的任何单元测试工具都可以解决这个问题,或者只有可用的东西——使用assert()吗?断言很棒,但不是那么花哨:)

4

1 回答 1

1

使用 jasmine-node (2.0.0) 我会像下面这样。我嘲笑了你的数据库,但它也应该适用于真实的东西。

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();
            });
        });
    });
});
于 2014-09-22T17:55:10.870 回答