我试图在超级测试中设置 cookie,但它不起作用

Kha*_*led 5 javascript unit-testing node.js supertest jestjs

我试图在超级测试中将 cookie 会话设置为 post 请求,但我不能。这是我的测试代码:

const app = express();

app.set("trust proxy", true);
app.use(json());
app.use(
  cookieSession({
    signed: false,
    secure: process.env.NODE_ENV !== "test",
  })
);
   
    
    it("this is a test", async () => {
      const response = await request(app)
        .post("/api/users/current")
        .set("Cookie", [
        'express:sess=eyJqd3QiOiJleUpoYkdjaU9pSklVekkxTmlJc0luUjVjQ0k2SWtwWFZDSjkuZXlKcFpDSTZJakV5TXpRaUxDSmxiV0ZwYkNJNkluUmxjM1JBZEdWemRDNWpiMjBpTENKcFlYUWlPakUyTkRZeE5qazVNREI5LjZybE8zODB2RG1PN0J4cFlhRERZSnBScmhrMEc2X3pvN3BBd2MxYU5rMVEifQ=='
          ])
        .send({});
    
      expect(response.get("Set-Cookie")).toBeDefined();
    });
Run Code Online (Sandbox Code Playgroud)

这个测试失败了,因为response.get("Set-Cookie")未定义

Mau*_*eal 6

新版本cookie-session将要求会话以关键字开头session

"session=eyJqd3QiOiJ..."
Run Code Online (Sandbox Code Playgroud)

与以下相反express:sess

"express:sess=eyJqd3QiOiJ..."
Run Code Online (Sandbox Code Playgroud)

另一件对我有帮助的事情是使用agent. 我是根据超级测试文档做到的。

import express from 'express';
import request from 'supertest';

const app = express();
const agent = request.agent(app); // <-- Important

const response = agent // <-- Request through agent
  .post('/api/users/current')
  .set('Cookie', [
    'session=eyJqd3QiOiJ...', // <-- No 'express:sess' (Cropped for demo)
  ])
  .send({});
Run Code Online (Sandbox Code Playgroud)


Daf*_*fny -2

据我调查,Supertest库并不稳定。大多数开发人员在测试期间设置或检索 cookie 时遇到困难。

你可以看一下这个链接: 如何设置签名cookie