在Express中的新端口上运行gulp-mocha测试

时间:2015-06-11 16:04:44

标签: node.js express gulp mocha

我已经搜遍过,但似乎无法找到答案。我希望能够在端口4443上运行服务器,但同时运行'gulp test'并打开一个新端口,比如8888,运行测试然后关闭该端口。现在,当我运行'gulp test'并且服务器已经在端口4443上运行时,我得到Error: listen EADDRINUSE。 我如何让它在一个新的端口而不是4443上开始?

这是我的gulp文件

'use strict';

var gulp = require('gulp');
var jshint = require('gulp-jshint');
var jscs = require('gulp-jscs');
var stylish = require('gulp-jscs-stylish');
var livereload = require('gulp-livereload');
var mocha = require('gulp-mocha');
var gutil = require('gulp-util');
var noop = function () {};

// run 'gulp lint' in the console to run jshint and jscs on every .js file under the server folder
// and all its sub folders
gulp.task("lint", function(){
  gulp.src("./server/**/*.js")
    .pipe(jshint())
    .pipe(jscs())
    .on('error', noop)
    .pipe(stylish.combineWithHintResults())
    .pipe(jshint.reporter("jshint-stylish"));
});

// run 'gulp test' to run test suite
gulp.task('test', function(){
  return gulp.src(['./server/assets/tests/specs/*.js'], {read: false})
    .pipe(mocha({reporter: 'nyan'}))
    .on('error', gutil.log)
    .once('end', function(){
      process.exit();
    });
});

// run 'gulp watch' to watch all .js files and have livereload listen for changes
gulp.task('watch', function(){
  livereload.listen();
  gulp.watch('./server/**/*.js');
});

这是app.js

/**
 * Node Server Configuration
 */
'use strict';

// Module dependencies.
var fs = require('fs');
var https = require('https');
var http = require('http');
var express = require('express');
var db = require('./server/api/models/db.js');

// Add coloring for console output
require('colors');

// self signed cert credentials
var credentials = {
  key: fs.readFileSync('key.pem'),
  cert: fs.readFileSync('cert.pem'),
  passphrase: 'testing'
};

// Create Express server.
var app = express();

// ignoring the self signed certs in dev environment
if(app.get('env') === 'development') {
  process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
}

// Express configuration
require('./server/config/express')(app, express);

// Start Express server.
https.createServer(credentials, app)
  .listen(app.get('securePort'), function() {
    console.log('✔ Express server listening on port '.green + '%d'.blue + ' in '.green + '%s'.blue + ' mode'.green, app.get('securePort'), app.get('env'));
});

// Set up HTTP redirect
var httpApp = express();
var httpRouter = express.Router();

httpApp.use('*', httpRouter);

httpRouter.get('*', function(req, res){
  var host = req.get('Host');

  host = host.replace(/:\d+$/, ":" + app.get('securePort'));

  var destination = ['https://', host, req.url].join('');
  return res.redirect(destination);
});

var httpServer = http.createServer(httpApp);
httpServer.listen(app.get('port'));

module.exports = app;

1 个答案:

答案 0 :(得分:0)

您的gulp任务看起来很好,您需要做的是更改应用监听的端口。您当前使用app.get('securePort')设置了侦听端口,我猜这是在./server/config/express的某处配置的,可以使用环境变量覆盖。

gulp-env是设置ENV变量的好选择

gulp.task('set-test-env', function () {
    env({
        vars: {
            EXPRESS_SECURE_PORT: 8888
        }
    });
});

gulp.task('test', ['set-test-env'], function() {
...