2012-12-27 9 views
8

私は何ヶ月もnode.jsを使って開発していましたが、今は新しいプロジェクトを開始しています。このアプリケーションの構造を知りたいと思います。node.jsのユニットテストのための構造

私の問題は単体テストについて話すときに来ます。ユニットテストを書くためにnodeunitを使用します。

また、エクスプレスを使用して自分のRESTルートを定義しています。

私はデータベースを2つの「別々の」ファイルにアクセスするコードを書くことを考えていました(もっと明らかになりますが、コードを単純化しようとしています)。ルートコードがあります。

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「をしたと仮定すると - あなたはNPMの-gフラグを使用した場合、あなたは単に$ ./node_modules/.bin/mochaまたは$ mochaを実行すると思います。

どのように依存する直腸 /詳細あなたは本当にしたいです。私は常に助言を受けており、より簡単に見つけることができます。最初にテストを書いて、明確な仕様の観点を得る。 その後、テストに対して実装を書いてください。余計な洞察力はありません。

+1

あなたはmongodbでmongoに接続したいと思うでしょう:// / binarygiant

+0

例を更新しました。 – rounce

関連する問題