admin管理员组

文章数量:1390983

I'm using something very similar to the following to execute a series of API tests using Mocha. This is great, but it requires making a separate API call for each test. I want to use the same API call and run multiple tests against that response. I've been reading that you can use before to do it, but none of the examples around the web actually show it working with API calls?

var chai = require('chai');
var request = require('request');
var async = require('async');
var assert = chai.assert,
    expect = chai.expect,
    should = chai.should();

describe('/', function () {
  it('should return 200', function (done) {
    request.get('http://localhost:8000', function (err, res, body) {
      res.should.have.status(200);
      done();
    });
  });

  it('should say "Hello, world!"', function (done) {
    request.get('http://localhost:8000', function (err, res, body) {
      body.should.have.property('type', 'aType');
      done();
    });
  });
});

I'm using something very similar to the following to execute a series of API tests using Mocha. This is great, but it requires making a separate API call for each test. I want to use the same API call and run multiple tests against that response. I've been reading that you can use before to do it, but none of the examples around the web actually show it working with API calls?

var chai = require('chai');
var request = require('request');
var async = require('async');
var assert = chai.assert,
    expect = chai.expect,
    should = chai.should();

describe('/', function () {
  it('should return 200', function (done) {
    request.get('http://localhost:8000', function (err, res, body) {
      res.should.have.status(200);
      done();
    });
  });

  it('should say "Hello, world!"', function (done) {
    request.get('http://localhost:8000', function (err, res, body) {
      body.should.have.property('type', 'aType');
      done();
    });
  });
});
Share Improve this question edited Nov 24, 2014 at 17:25 brandonscript asked Nov 24, 2014 at 1:24 brandonscriptbrandonscript 73.2k35 gold badges175 silver badges237 bronze badges
Add a ment  | 

1 Answer 1

Reset to default 6

You could do this with a before function like so...

var chai = require('chai');
var request = require('request');
var async = require('async');
var assert = chai.assert,
    expect = chai.expect,
    should = chai.should();

describe('/', function () {
  var firstRequest;

  before(function(done) {
    request.get('http://localhost:8000', function(err, res, body) {
      firstRequest = {
        err:err,
        res:res,
        body:body
      };
      done();
    });
  });

  it('should return 200', function (done) {
    firstRequest.res.should.have.status(200);
    done();
  });

  it('should say "Hello, world!"', function (done) {
    firstRequest.body.should.have.property('type','aType');
    done();
  });
});

However, unless you have a really good reason to do this, I think you're better off just bining the tests.

var chai = require('chai');
var request = require('request');
var async = require('async');
var assert = chai.assert,
    expect = chai.expect,
    should = chai.should();

describe('/', function () {
  it('should return 200 and say "Hello, world!"', function (done) {
    request.get('http://localhost:8000', function (err, res, body) {
      res.should.have.status(200);
      body.should.have.property('type', 'aType');
      done();
    });
  });
});

If the test fails Mocha will report the specific reason why it failed even though there are two assertions.

本文标签: javascriptNodejsChaiMochaShould running multiple tests against the same responseStack Overflow