我正在尝试设置我的快速服务器的茉莉花测试.我正在使用每个规范启动一个新服务器,并在每个规范完成后尝试将其关闭.不幸的是,服务器似乎没有关闭……使得运行不止一个规格变得不
server.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”被抛出.
您可以使用npm模块 server-destroy.server-destroy跟踪所有连接,然后在调用destroy时关闭它们.此外,destroy方法需要回调,所以你应该将你的“完成”函数传递给你的destroy方法……下面是从npm模块描述复制的,在destroy调用中增加了一个回调.var enableDestroy = require('server-destroy'); var server = http.createServer(function(req, res) { // do stuff, blah blah blah }); server.listen(PORT); // enhance with a 'destroy' function enableDestroy(server); // some time later... server.destroy(done);
如果打开连接不是问题,您可以简单地将done函数传递给close函数server.close(done),如本文中的描述How to correctly unit test Express server