Node.js 从SuperTest获取特定的响应属性

Node.js 从SuperTest获取特定的响应属性,node.js,supertest,Node.js,Supertest,我希望能够抓取一些响应属性,并在使用时将它们放入变量中。我该怎么做?我只看到文档对响应进行断言 例如,我想做这样的事情: var statusCode = request(app).get(uri).header.statusCode; 我想做这样的事。因为有时我喜欢将断言拆分为单独的Mocha.js it()测试,因为我正在执行BDD,所以在本例中的“Thens”基于预期的响应部分,因此每个测试都在检查响应中返回的特定状态 例如,我想使用supertest执行此操作: var respon

我希望能够抓取一些响应属性,并在使用时将它们放入变量中。我该怎么做?我只看到文档对响应进行断言

例如,我想做这样的事情:

 var statusCode = request(app).get(uri).header.statusCode;
我想做这样的事。因为有时我喜欢将断言拆分为单独的Mocha.js it()测试,因为我正在执行BDD,所以在本例中的“Thens”基于预期的响应部分,因此每个测试都在检查响应中返回的特定状态

例如,我想使用supertest执行此操作:

var response = request(app).get(uri);

it('status code returned is 204, function(){
response.status.should.be....you get the idea
};

it('data is a JSON object array', function(){
};

下面是一个示例,说明如何实现您的目标:

服务器文件
app.js

var express = require('express');
var app = express();
var port = 4040;

var items = [{name: 'iphone'}, {name: 'android'}];

app.get('/api/items', function(req, res) {
  res.status(200).send({items: items});
});

app.listen(port, function() {
  console.log('server up and running at %s:%s', app.hostname, port);
});

module.exports = app;
var request = require('supertest');
var app = require('./app.js');
var assert = require('assert');

describe('Test API', function() {
  it('should return 200 status code', function(done) {
    request(app)
      .get('/api/items')
      .end(function(err, response) {
        if (err) { return done(err); }

        assert.equal(response.status, 200);
        done();
      });
  });

  it('should return an array object of items', function(done) {
    request(app)
      .get('/api/items')
      .end(function(err, response) {
        if (err) { return done(err); }
        var items = response.body.items;

        assert.equal(Array.isArray(items), true);
        done();
      });
  });  

  it('should return a JSON string of items', function(done) {
    request(app)
      .get('/api/items')
      .end(function(err, response) {
        if (err) { return done(err); }

        try {
          JSON.parse(response.text);
          done();
        } catch(e) {
          done(e);
        }
      });
  });

});

test.js

var express = require('express');
var app = express();
var port = 4040;

var items = [{name: 'iphone'}, {name: 'android'}];

app.get('/api/items', function(req, res) {
  res.status(200).send({items: items});
});

app.listen(port, function() {
  console.log('server up and running at %s:%s', app.hostname, port);
});

module.exports = app;
var request = require('supertest');
var app = require('./app.js');
var assert = require('assert');

describe('Test API', function() {
  it('should return 200 status code', function(done) {
    request(app)
      .get('/api/items')
      .end(function(err, response) {
        if (err) { return done(err); }

        assert.equal(response.status, 200);
        done();
      });
  });

  it('should return an array object of items', function(done) {
    request(app)
      .get('/api/items')
      .end(function(err, response) {
        if (err) { return done(err); }
        var items = response.body.items;

        assert.equal(Array.isArray(items), true);
        done();
      });
  });  

  it('should return a JSON string of items', function(done) {
    request(app)
      .get('/api/items')
      .end(function(err, response) {
        if (err) { return done(err); }

        try {
          JSON.parse(response.text);
          done();
        } catch(e) {
          done(e);
        }
      });
  });

});

您可以看到一些示例,因为
supertest
基于
superagent
库。

是否有任何方法可以获取请求的响应时间(即response.time=300ms)?