2012-12-27 54 views
8

我一直在用node.js開發幾個月,但現在我開始一個新項目,我想知道如何構建應用程序。Node.js與貓鼬進行單元測試的結構

當談到單元測試時,我的問題就來了。我將使用nodeunit編寫單元測試。

此外,我使用express來定義我的REST路由。我想寫我的代碼,訪問數據庫在兩個「單獨」文件(他們會更多,顯然,但我只是想簡化代碼)。將會有路線代碼。

var mongoose = require('mongoose') 
, itemsService = require('./../../lib/services/items-service'); 

// GET '/items' 
exports.list = function(req, res) { 
    itemsService.findAll({ 
     start: req.query.start, 
     size: req.query.size, 
     cb: function(offers) { 
      res.json(offers); 
     } 
    }); 
    }; 

而且,正如我在那裏,一個項目服務只是用來訪問數據層。我這樣做是爲了測試單元測試中的數據訪問層。這將是這樣的:

var mongoose = require('mongoose') 
    , Item = require('./../mongoose-models').Item; 

exports.findAll = function(options) { 
    var query = Offer 
     .find({}); 
    if (options.start && options.size) { 
     query 
      .limit(size) 
      .skip(start) 
    } 
    query.exec(function(err, offers) { 
     if (!err) { 
       options.cb(offers); 
      } 
    }) 
}; 

這樣我可以與單元測試檢查其是否正常工作,我可以隨處使用此代碼我想要的。我不確定它是否正確完成的唯一方法是我傳遞迴調函數以使用返回值的方式。

您認爲如何?

謝謝!

回答

2

是的,很容易! 您可以使用像mocha這樣的單元測試模塊和節點自己的斷言或其他例如should

作爲測試用例的示例模型的例子:

var ItemService = require('../../lib/services/items-service'); 
var should = require('should'); 
var mongoose = require('mongoose'); 

// We need a database connection 
mongoose.connect('mongodb://localhost/project-db-test'); 

// Now we write specs using the mocha BDD api 
describe('ItemService', function() { 

    describe('#findAll(options)', function() { 

    it('"args.size" returns the correct length', function(done) { // Async test, the lone argument is the complete callback 
     var _size = Math.round(Math.random() * 420)); 
     ItemService.findAll({ 
     size : _size, 
     cb : function(result) { 
      should.exist(result); 
      result.length.should.equal(_size); 
      // etc. 

      done(); // We call async test complete method 
     } 
     }, 
    }); 


    it('does something else...', function() { 

    }); 

    }); 

}); 

等等,廣告nauseum。

然後當你完成了你的測試 - 假設你的$ npm install mocha'd - 那麼你只需運行$ ./node_modules/.bin/mocha$ mocha如果你使用npm的-g標誌。

取決於如何直腸 /詳細你想成爲真正的。我一直被建議,並且發現它更容易:首先編寫測試,以獲得清晰的規格透視圖。 然後針對測試編寫實現,並提供免費贈品。

+1

您需要使用mongodb連接到mongo:// / binarygiant

+0

更新了示例。 – rounce