简体   繁体   English

使用回调对数据库例程进行NodeJS单元测试

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM