1,我用koa开发项目,用mocha,supertest测试。登陆和注册都是有验证码的,而验证码是存在Session中的,我如果要测试就得拿到那个验证码才能通过测试。我的Session是基于cookie的那种,但是cookie是加密的,我能拿到cookie,却还是取不到值。
目前我能想到的办法:
1>开发一个新接口 '/getCaptcha',把session里面的code返回给我,这样我就可以测试了。
2>对于 capthca写死一个值,比如'aaaa',如果等于'aaaa',就通过验证。
感觉两种都不怎么好,最好能直接访问到session.
下面贴出精简后的代码;
app.js
var app = module.exports =require('koa')(); var router = require('koa-router')(); var session = require('koa-session'); var parse = require('co-body'); app.keys = 'segmentfault'; app.use(session(app)); router.get('/captcha',function(){//写入session this.session.captcha = getRandom(4);//随机数字,模拟图形验证码或短信验证码 this.body = { success:true } }); router.post('/doLogin',function(){ var params = yield parse(this); if(params.capthca != this.session.captcha){ this.body = { success:false, msg:'手机验证码错误' } return; } //省略校验账号密码 this.body= { success:true, msg:'登陆成功' } })
test.js
var app = require('../app');//就是上面的文件 var request = require('supertest').agent(app.listen()); describe('test login',function(){ it('get the capthca code',function(){ request.get('/captcha').expect(200).end(function(err,res){ sid = res.headers['set-cookie'].pop().split(';') //可以拿到cookie但是加密过的,所以没法提交登陆 }) }) });
定义debug模式,允许关闭验证码或者允许自定义对错验证码就可以了