NodeJs学习笔记(五)---单元测试补充

    今天早上继续研究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)

     很简单就解决了,记录下来备忘吧。

你可能感兴趣的:(nodejs)