2012-12-27 2 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 '이라고 가정하고 테스트를 마쳤 으면 npm의 -g 플래그를 사용한 경우 $ ./node_modules/.bin/mocha 또는 $ mocha을 실행하면됩니다.

어떻게 달라 지겠습니까 직장/상세하고 싶습니다. 필자는 항상 조언을 받았고 더 쉽게 찾을 수있었습니다. 먼저 테스트를 작성하여 명확한 스펙을 파악합니다. 그런 다음 테스트에 대한 구현을 작성하고 추가 통찰력은 공짜로 작성하십시오.

+1

mongob를 사용하여 mongo에 연결하려고합니다. // / binarygiant

+0

예제를 업데이트했습니다. – rounce

관련 문제