8

何ヶ月も 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);
            }
    })
};

このようにして、正しく機能するかどうかを単体テストで確認でき、このコードをどこでも使用できます。正しく行われたかどうかわからない唯一のことは、戻り値を使用するためにコールバック関数を渡す方法です。

どう思いますか?

ありがとう!

4

1 に答える 1

2

はい、とても簡単です!mochaのような単体テスト モジュールと、ノード独自の assert またはshouldなどの別の assert を使用できます。

サンプル モデルのテスト ケースの例として:

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() {

    });

  });

});

などなど、うんざりです。

次に、テストの作成が完了したら (テストを行ったと仮定して$ npm install mocha)、単純に実行する$ ./node_modules/.bin/mocha$ mocha、npm の -g フラグを使用した場合。

やり方次第直腸/detailed 本当になりたい。私は常に次のようにアドバイスされてきましたが、その方が簡単だと思います: 最初にテストを書き、明確な仕様の観点を得る。次に、追加の洞察を景品として、テストに対して実装を記述します。

于 2012-12-29T02:48:23.720 に答える