TDD测试第一个Nodejs表示Rest Api - 单元测试中间/控制器/路由

时间:2017-02-19 15:27:54

标签: node.js unit-testing express tdd

我正在试图弄清楚如何首先测试我的节点js rest api app。 到目前为止,我一直在使用nock来拦截和模拟任何http调用,并通过该测试将我的服务作为一个组件。 (组件测试?) 我想开始对我的应用进行单元测试,这样我的测试金字塔就更平衡,测试也更容易编写。

在网上搜索我得到了这种方法: http://www.slideshare.net/morrissinger/unit-testing-express-middleware

CONLbits

(基本上将中间件拉出来并进行测试)

由于此演示文稿是从2014年开始的,我想知道目前最新的单元测试快递应用程序的方法是什么?

1 个答案:

答案 0 :(得分:2)

我有同样的问题,我使用了另一种方法。 首先,我创建了一个包含在我的所有测试中的文件,它启动节点并导出一个函数来发送http请求:

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();     
  }
}

然后我使用之前声明的方法调用我的服务器:

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();
    })
  });
});