2017-02-19 8 views
1

첫 번째 노드 js 나머지 API 응용 프로그램을 테스트하는 방법을 알아 내려고하고 있습니다. 지금까지 nock을 사용하여 모든 http 호출을 모의하고 모의 테스트하여 구성 요소로서의 서비스를 테스트했습니다. (구성 요소 테스트?) 내 테스트 피라미드가 더 균형을 이루고 테스트가 더 쉽게 작성 될 수 있도록 단위 테스트를 시작하고 싶습니다. 나는이 방법에있어 웹 검색TDD 첫 번째 테스트 Nodejs는 나머지 API 테스트를 수행합니다.

:이 프레젠테이션은 2014 년 이후 http://www.slideshare.net/morrissinger/unit-testing-express-middleware

var middleware = require('./middleware'); 
app.get('example/uri', function (req, res, next) { 
    middleware.first(req, res) 
    .then(function() { next(); }) 
    .catch(res.json) 
    .done(); 
}, function (req, res, next) { 
    middleware.second(req, res) 
    .then(function() { next(); }) 
    .catch(res.json) 
    .done(); 
}); 

(basicly를 미들웨어를 잡아 당겨 및 테스트)

궁금 현재까지 무엇인가 단위 테스트를위한 최신 메소드는 앱을 표현하고 있습니까?

답변

1

나는 동일한 문제가있어서 다른 접근법을 사용했습니다. 먼저 나는 노드를 시작하고 HTTP 요청을 전송하는 기능을 내보내 내 모든 시험에 포함 된 파일을 만든 :

var doHttpRequest = require('./global-setup.js').doHttpRequest; 
var expect = require('chai').expect; 

describe('status page test', function() { 

    it('should render json', function(done){ 
    doHttpRequest('/status', function(response) { 
     expect(JSON.parse(response).status).to.eql('OK'); 
     done(); 
    }) 
    }); 
}); 
: 그럼 난 내 서버는 이전의 선언 방법을 사용하여 호출

process.env.NODE_ENV = 'test'; 
var app = require('../server.js'); 

before(function() { 
    server = app.listen(3002); 
}); 

after(function(done) { 
server.close(done); 
}); 

module.exports = { 
    app: app, 
    doHttpRequest: function(path, callback) { 
    var options = { 
     hostname: 'localhost', 
     port: 3002, 
     path: path, 
     method: 'GET', 
     headers: { 
     'Content-Type': 'application/json', 
     'Content-Length': 0 
     } 
    }; 

    var req = http.request(options, 
     function(response) { 
     response.setEncoding('utf8'); 

     var data = ''; 
     response.on('data', function(chunk) { 
      data += chunk; 
     }); 

     response.on('end', function() { 
      callback(data, response.statusCode); 
     }); 
     }); 

    req.end();  
    } 
}