2014-02-10 2 views
2

mocha 또는 sinon을 사용하여 mysql 쿼리를 테스트하기위한 모범 사례를 찾고 있습니다. 나는 또한 테스트를 분리 할 내가 내 DB 객체 대신 객체 데이터베이스와 사용의 모형을 만들고 싶어 생각테스트에서 쿼리를 분리하는 모범 사례

User.prototype.save = function(cb) { 

var query = 'INSERT INTO user (name, email, password, img, description)' 
    + 'values (?, ?, ?, ?, ?)'; 

var params = [this.name, this.email, this.pass, this.img, this.description]; 

db.query(query, 
    params, 
    function(err, rows) { 
     if (err) return cb(err); 
     cb(rows.insertId); 
    } 
); 
}; 

을 :하지만, 나는 그런 저장 등의 아주 기본적인 DB 쿼리를 테스트하기 위해 노력하고있어 응용 프로그램 논리의 논리.

나는 기능이 유형의 테스트를위한 최상의 방법이 있을까요

describe('User', function() { 
before(function() { 
    mock = sinon.mock(require('../middleware/db')); 
}) 
describe('.save()', function() { 
    var uid; 
    it('should run save on a user', function() { 
     var user = new User ({ 
      name: 'Test Case 1', 
      email: '[email protected]', 
      pass: 'pass', 
      img: 'path/to/img.jpg' 
     }); 
     user.save(function(id) { 
      id.should.be.ok; 
      var uid = id; 
     }); 
    }) 
    it('should save the user', function() { 
     var ret = User.find(uid); 
     ret.should.be.ok; 
     ret.should.have.property('description'); 
     ret.name.should.equal('Test Case 1'); 
     ret.email.should.equal('[email protected]'); 
    }) 
}) 

의 라인을 따라 변화를 시도?

감사

답변

0

데이터베이스와의 실제 상호 작용은 단위 테스트에 의해 처리되어서는 안하지만 말까지 시험을 종료합니다. 데이터베이스에 대한 종단 간 테스트의 모범 사례는 각 테스트 전에 데이터베이스에로드 될 데이터베이스 상태를 정의하는 것입니다.

단위 테스트 측면에서 보면이 방법은 외부 모듈을 호출하는 래퍼이므로 단위 테스트를 제 3 자로 연기하는 것으로 충분할 수 있습니다.