supertest如何设置session和cookie?

发布于 2022-09-02 23:47:27 字数 1171 浏览 15 评论 0

我看文档设置cookie 是这么写的

var request = require('supertest')
   , should = require('should')
   , express = require('express')
   , cookieParser = require('cookie-parser');


describe('request.agent(app)', function(){
  var app = express();
  app.use(cookieParser());

  app.get('/', function(req, res){
    res.cookie('cookie', 'hey');
    res.send();
  });

  app.get('/return', function(req, res){
    if (req.cookies.cookie) res.send(req.cookies.cookie);
    else res.send(':(')
  });

  var agent = request.agent(app);

  it('should save cookies', function(done){
    agent
    .get('/')
    .expect('set-cookie', 'cookie=hey; Path=/', done);
  })

  it('should send cookies', function(done){
    agent
    .get('/return')
    .expect('hey', done);
  })
})

这里的

expect('set-cookie', 'cookie=hey; Path=/', done)

'set-cookie'是指操作,然后'cookie=hey; Path=/'这个是cookie值的样子,但是我看api,并没有这种说明,也同样没有说能获取

expect('hey', done); 

cookie值的说明
https://github.com/visionmedia/supertest#api

那么session又该如何设置呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

月竹挽风 2022-09-09 23:47:27

cookiehey是在这里设置的:

app.get('/', function(req, res){
    //当访问跟路由时设置了cookie
    res.cookie('cookie', 'hey');
    res.send();
});

expect('hey', done);这个断言之所以能成功是因为,按照你测试用例的书写顺序,肯定先跑过了前一个should save cookies的case,那cookie就设置成功了,然后再跑第二个case的时候,服务端部分:

app.get('/return', function(req, res){
    //req.cookies.cookie是有值的了,然后会把值返回给前端,所以在case里,/return的返回值里确实有hey
    if (req.cookies.cookie) res.send(req.cookies.cookie);
    else res.send(':(')
  });

至于如何设置session,你首先需要一个相应的中间件session

补充:

supertest对断言的部分描述的还是相对比较清晰的:

图片描述

我选中的部分就是可以用来断言cookie的部分,之所以你"视而不见",是因为你不知道cookiehttp传输过程中存在于header之中。(关于基础,你需要的学习,就是学习。这个需要积累,不是靠“牛人”点拨就能获取的)

还有“我不知道supertest能不能直接对cookie和session进行操作”,当然不是,我就看了一眼你的测试用例,就发现supertest其实是个模拟客户端发请求的工具,既然是客户端,当然不能设置sessionsession是后端处理的,所以我才说是你的后端部分需要增加中间件处理。(关于session是什么,仍然是基础,这个不是问题,我就算给你说个1000字,也不见得能说的完全清楚,你更不见的有兴趣读完。基础是必须的,群里没有一个“大牛”是基础不存在的情况下,突然成神的)

关于session,前几天刚好回答过一个express-session和passportjs各自都做了哪些事情实现了自动登录?

来日方长 2022-09-09 23:47:27

先定义好session
var session = {
"name":"jack"
}
其次,直接set()方法设置header(前提是在app.js里面已经设置好,
比如:let ticket = req.headers['ticket'];
session = JSON.parse(ticket);
req.session = session;)
然后,接下来在测试代码set了,最后开启vscode进行调试
一下是部分代码
describe('/xx', function() {

        it('should create a create', function(done) {
            request(url)
                .post(`/xx`)
                .set('Accept', 'application/json')
                .set('ticket', JSON.stringify({  //这里设置session
                    user: { 
                        id: "1111",
                    }
                }))
                .send({
                    "name": '路人甲'
                })
                .expect('Content-Type', /json/)
                .expect(200)
                .end(function(err, res) {
                ...略
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文