今天早上继续研究Mocha,忽然发现一个问题,我的大部分程序都是需要登录验证的,所以需要预先登录之后才能进行下一步测试,就开始在网上找答案,发现没有这种资料,很疑惑,最后发现其实是自己太笨了,因为这个问题在Node中太简单了,解决方案如下
修改bootstrap.test.js,如下
var Sails = require('sails'), sails; var request = require('supertest'); var port = 1447; //测试启动端口 agent = request.agent('http://localhost:'+port); //服务器连接,全局变量 before(function (done) { Sails.lift({ log : { level : 'error' }, port:port }, function (err, server) { sails = server; if (err) { return done(err); } else {//登录 agent.get('/user/login?login_code=18875282207&user_password=111111') .end(function (err, res) { if (err) return done(err); done(err, sails); }); } }); }); after(function (done) { var done_called = false; Sails.lower(function () { if (!done_called) { done_called = true; setTimeout(function () { sails.log.debug("inside app.lower, callback not called yet. calling."); done(); }, 1000); } else { sails.log.debug("inside app.lower, callback already called."); } }); });
增加了全局变量agent = request.agent('http://localhost:'+port),这个变量可以在以后发起请求,同时启动sailsjs之后,直接登录,以后测试controllers时,就只需要调用agent.get()或者agent.post()就可以了,前面的controller测试UserController.test.js修改如下:
var should = require('should'); describe('UsersController', function () { describe('#session()', function () { it('should get true', function (done) { agent.get('/user/test') .end(function (err, results) { should(results.res.body.authenticated).be.exactly(true); done(); }); }); }); });
其中/user/test的返回值格式为{authenticated: true},如果已经登录则返回true,否则返回false。
运行npm test,结果如下
1 passing (8s)
很简单就解决了,记录下来备忘吧。