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将依次运行,按照它们写入文件的顺序运行。