4

Express サーバーのジャスミン テストをセットアップしようとしています。各スペックで新しいサーバーを起動し、各スペックが完了したらシャットダウンしようとしています。残念ながら、サーバーはシャットダウンしていないようです... 複数の仕様を実行することは不可能です。

サーバー.js:

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

exports.start = function(config){
  if(!this.server){
    app.get('/', function(req, res){
      res.status(200);
      res.end();
    })

    this.server = app.listen(config.port, function(){
      console.log('Server running on port %d', config.port);
    });
  }
};

exports.close = function(){
  this.server.close();
}

ルーティング-spec.js:

var server = require('./path/to/server.js');
var http = require('http');

describe('express server', function () {
  beforeEach(function () {
    server.start({port: 8000});
  });

  afterEach(function () {
    server.close();
  });

  describe('/', function () {
    it('should return 200', function (done) {
      http.get('http://localhost:8000', function (res) {
        expect(res.statusCode).toBe(200);
        done();
      });
    });
  });
});

最初の仕様は期待どおりに合格しますが、端末はテストを完了せず (つまり、サーバーがまだ実行されています)、追加された後続のテストにより "ECONNREFUSED" がスローされます。

4

2 に答える 2

1

Express をプログラムで確実にシャットダウンすることはできませんでした。代わりに、jasmine-before-all のようなものを使用して、すべての統合テストでサーバーを 1 回起動することをお勧めします。これにより、テストも高速化されます。

mocha の優れている点の 1 つは、前後にルート スイートが含まれていることです。これは、まさにこのような場合に役立ちます。https://stackoverflow.com/a/18802494/1935918を参照してください

于 2014-04-23T15:22:37.377 に答える