Javascript node.js在启动时运行方法

Javascript node.js在启动时运行方法,javascript,node.js,express,Javascript,Node.js,Express,node.js的新增功能 我正在使用mocha为node.js应用程序设置集成测试,遵循以下指南: 创建了一个服务器,如下所示: var http = require('http'); this.server = http.createServer(function (req, res) { res.writeHead(200, { 'Content-Type': 'text/plain' }); res.end('Hello, world!\n'); }); exports.lis

node.js的新增功能

我正在使用mocha为node.js应用程序设置集成测试,遵循以下指南:

创建了一个服务器,如下所示:

var http = require('http');

this.server = http.createServer(function (req, res) {
  res.writeHead(200, { 'Content-Type': 'text/plain' });
  res.end('Hello, world!\n');
});

exports.listen = function () {
  this.server.listen.apply(this.server, arguments);
};

exports.close = function (callback) {
  this.server.close(callback);
};
侦听和关闭功能的作用是:

  • require('server')是幂等的
  • 可以在测试中启动和停止服务器
问题:

如何创建在启动时调用server.listen的启动脚本?目前,它是通过以下方式启动的:

"scripts": {
    "test": "mocha --reporter spec",
    "start": "nodemon server.js"
  }

^--我想在上面的脚本中添加对server.listen()的调用

您可以使用以下代码位测试脚本是否已从命令行调用或由另一个脚本调用:

const PORT = process.argv[2] || 8080; // whatever port number

if (require.main === module) {

   this.server.listen(PORT); // to start listening

   // or, if you are certain that it will always be
   // called the same way... you could apply a slice
   // of process.argv to server.listen
   //
   // this.server.listen.apply(this.server, process.argv.slice(2))
   //
   // https://nodejs.org/api/http.html#http_server_listen_port_hostname_backlog_callback
}
这将在直接调用服务器时立即启动服务器侦听,如果被其他脚本使用,则等待在导入的模块上调用侦听

您可以向npm启动脚本传递可选端口参数,如下所示:

"start": "nodemon server.js 8001"

非常感谢,瑞安!现在就试试看。你能告诉我如何在测试中启动服务器吗?不客气,贾斯珀
mocha
分别在函数回调之前的
和之后的
中使用设置和拆卸逻辑。因此,
before
可能如下所示:
var server=require('./server')before((完成)=>{server.listen(PORT,done)}
像这样拆卸:
before(()=>{server.close()})