javascript - 带验证码的登陆如何测试?

 wuzhi61448 发布于 2022-11-15 11:23

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但是加密过的,所以没法提交登陆
        })
        
        
    })
});
1 个回答
  • 定义debug模式,允许关闭验证码或者允许自定义对错验证码就可以了

    2022-11-15 12:21 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有