unit testingExpress / Loopback中间件,无需启动服务器

有没有一种方法来unit testingExpress / Loopback中间件,而不需要实际创build服务器和侦听端口?

我的问题是,在我的testing代码中创build多个服务器将引入端口冲突的问题。

您可以使用超级模块。

你可以传递一个http.Server或者一个Function来请求() – 如果服务器没有监听连接,那么它会被绑定到一个短暂的端口上,这样就不需要跟踪端口了。

摩卡

摩卡的一个例子

var request = require('supertest'); var app = require('path/to/server.js'); describe('GET /user', function() { it('respond with json', function(done) { request(app) .get('/user') .set('Accept', 'application/json') .expect('Content-Type', /json/) .expect(200, done); }); }); 

艾娃

另外,您可能对avatesting跑步者感兴趣,而不是摩卡。

主要原因 : testing文件之间的进程隔离

这通常是我用ava的testing文件模板

 var describe = require('ava-spec').describe; var app = require('path/to/server.js'); var request = require('supertest'); describe("REST API", function(it){ it.before.cb(function(t){ request(app) .post('/api/Clients/') .send({ "username": "foo", "password": "bar" }) .expect(200, function(err, res){ t.end(err); }); }); it.serial.cb('Does something', function(t){ request(app) .get(//..) .expect(404, function(err, res){ if (err) return t.end(err); t.end(); }); }); it.serial.cb('Does something else afterward', function(t){ request(app) .get(//..) .expect(401, function(err, res){ if (err) return t.end(err); t.end(); }); }); }); 

serial标识符告诉ava serial运行it子句。 否则,它将并行运行所有文件中的所有testing。

由于进程隔离,每个testing文件都有自己独立的回送实例(通常是节点环境),所有的testing文件都可以并行运行,这也加快了testing速度。 但是,在每个testing文件中,使用serial ,testing将依次运行,按照它们写入文件的顺序运行。