Javascript 如何使用supertest模块测试对象的键和值

Javascript 如何使用supertest模块测试对象的键和值,javascript,node.js,express,supertest,Javascript,Node.js,Express,Supertest,我的测试代码如下: const mocha = require('mocha'); const describe = mocha.describe; const it = mocha.it; const chai = require('chai'); const request = require('supertest'); const app = require('../app.test'); chai.should(); describe('Get /histories', () =&

我的测试代码如下:

const mocha = require('mocha');
const describe = mocha.describe;
const it = mocha.it;
const chai = require('chai');
const request = require('supertest');

const app = require('../app.test');

chai.should();

describe('Get /histories', () => {
  it('should return 200 status code', done => {
    request(app)
      .get('/client/profile')
      .expect('Content-Type', /json/)
      .expect(200, done);
  });

  it('should return code: 400', done => {
    request(app)
      .get('/client/profile')
      .expect('Content-Type', /json/)
      .expect(200)
      .expect(res => {});
  });
});
我使用Express以自定义状态代码进行响应:

return res.json({
    code: 400
})
因此,我想测试测试代码是否有代码作为对象的键,值是400作为数字


如何编写此测试?

我想这就是您要找的。如果你需要更多信息,请告诉我

it('should return code: 400', async (done) => {
    var resp = await request(app)
      .get('/client/profile')
      expect(resp.statusCode).to.equal(400)
      expect(resp.body.code).to.equal(400)
  });
resp.statusCode
是http响应代码。
resp.body
是响应主体。由于这是一个json,json的响应将具有
code

您可以使用以下内容:

it('should return code: 400', (done) => {
  request(app)
    .get('/client/profile')
    .expect('Content-Type', /json/)
    .expect(200)
    .end((err, res) => {
      if (err) {
        return done(err);
      }
      expect(res.code).to.be.equal(400);
      return done();
    });
});

在最后一次
回调中,您是否尝试过使用
res
ponse。期待
回调?@jornsharpe不,我是单元测试新手。你能给我写些代码吗?不,这不是代码编写服务。看看Supertest文档,它们有关于响应的断言示例。