我试图在supertest中为post请求设置cookie会话,但我做不到。这是我的测试代码:
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();
});
并且该测试失败,因为CCD_ 1是未定义的
cookie-session
的新版本将要求会话以关键字session
:开始
"session=eyJqd3QiOiJ..."
与express:sess
:相反
"express:sess=eyJqd3QiOiJ..."
另一件对我有帮助的事情是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({});
根据我的调查,Supertest库并不稳定。大多数开发人员在测试期间难以设置或检索cookie。
您可以查看此链接:如何设置签名cookie