Как запустить сервер для нескольких тестовых файлов mocha chai-http?

Я запускаю свой сервер узлов в моем блоке перед моими тестами mocha chai-http.

У меня он отлично работает для одиночных тестовых файлов. Однако, когда я пытаюсь запустить несколько тестов в одной команде NODE_ENV=test mocha test/**/*.js, я получаю сообщение об ошибке.

Я попытался запустить серверы узлов на разных портах для каждого тестового файла. Это не сработало, возникли ошибки запуска сервера узла.

Теперь я думаю, что было бы здорово, если бы у меня был один файл mocha, который запускается перед другими моими тестовыми файлами для запуска сервера, а затем один файл, который запускается после других тестовых файлов, чтобы убить/остановить сервер.

Как бы я поступил по этому поводу.

Ниже приведен мой код:

Вот один из моих тестовых файлов для справки:

var chai = require('chai');
var chaiHttp = require('chai-http');
chai.use(chaiHttp);
var expect = chai.expect;
var Sails = require('sails');

describe('REST User API', function() {

  var app;    // for access to the http app
  var sails;  // for starting and stopping the sails server

  before(function (done) {
    Sails.lift({
      port: 3001,
      log: {
        level: 'error'
      }
    }, function (_err, _sails) {
      if(_err){
        console.log("Error!", _err);
        done();
      }
      else {
        app = _sails.hooks.http.app;
        sails = _sails;
        done();
      }
    });
  });

  describe("user session", function () {
    var res;  // http response
    var authenticatedUser;

    before(function (done) {
      chai.request(app)
        .post('/users/signin')
        .set('Accept', 'application/json')
        .set('Content-Type', 'application/json')
        .send({ email: '[email protected]', password: 'secret'})
        .end(function (_res) {
          res = _res; // Record the response for the tests.
          authenticatedUser = JSON.parse(_res.text); // Save the response user for authenticated tests
          done();
        });
    });

    it("should connect with a 200 status", function () {
      expect(res).to.have.status(200);
    });

    it("should have a complete user session", function () {
      var userSession = authenticatedUser;
      expect(userSession).to.have.property('firstName');
      expect(userSession).to.have.property('lastName');
      expect(userSession).to.have.property('gender');
      expect(userSession).to.have.property('locale');
      expect(userSession).to.have.property('timezone');
      expect(userSession).to.have.property('picture');
      expect(userSession).to.have.property('phone');
      expect(userSession).to.have.property('email');
      expect(userSession).to.have.property('username');
      expect(userSession).to.have.property('confirmed');
      expect(userSession).to.have.property('status');
      expect(userSession).to.have.property('authToken');
    });

  });

  after(function (done) {
    sails.lower(function() {
      done()
    });
  });

});

person Kevin Baker    schedule 16.03.2015    source источник
comment
Итак, где эта ошибка, которую вы получаете?   -  person Piotr Dajlido    schedule 16.03.2015
comment
Я получаю сообщение об ошибке столкновения портов. Странно, у меня всего два теста и они запускают сервер в методе before на разных портах. error: Trying to start server on port 3007 but can't...Something else is probably running on that port! Please disable the other server, or choose a different port and try again.   -  person Kevin Baker    schedule 16.03.2015


Ответы (1)


Из mocha v8.2.0 вы можете использовать GLOBAL FIXTURES для настройки и демонтажа веб-сервера для всех наборов тестов. Глобальные фикстуры гарантированно выполняются один и только один раз.

person slideshowp2    schedule 28.12.2020