Tia*_*dão 4 cookies typescript supertest jestjs
我刚刚开始使用 Jest,正在尝试测试端点POST/register。该端点发回 2 个 cookie:accessToken:*jwt*和refreshToken:*jwt*。
这是我的测试文件:
import server from "../server"
import supertest from "supertest"
import mongoose from "mongoose"
import dotenv from "dotenv"
dotenv.config()
const request = supertest(server)
describe("Testing Auth endpoints", () => {
beforeAll(done => {
const PORT = process.env.PORT
mongoose
.connect(process.env.MONGO_STRING_TEST!)
.then(() => {
console.log("Connect to Atlas. Test DB.")
done()
})
.catch(err => console.log(err))
})
const validUser = {
name: "Paul Stevens",
email: "ps@g.com",
password: "1234",
role: "host",
}
it("should test /register for a valid request and return 201 status code and accessToken and refreshToken through cookies", async () => {
const resp = await request.post("/users/register").send(validUser)
// I want the content of the cookies here
})
afterAll(done => {
mongoose.connection.close(() => {
done()
})
})
})
Run Code Online (Sandbox Code Playgroud)
这是终点。我正在测试这个东西,所以我实际上在响应正文和 cookie 中发送令牌。
UsersRouter.post("/register", async (req, res, next) => {
try {
const newUser = new UserModel(req.body)
const savedUser = await newUser.save()
const { accessToken, refreshToken } = await getTokens(savedUser)
res.cookie("accessToken", accessToken, { httpOnly: true })
res.cookie("refreshToken", refreshToken, { httpOnly: true })
res.status(201).send({ accessToken, refreshToken, user: savedUser })
} catch (error) {
next(createError(400, error as Error))
}
})
Run Code Online (Sandbox Code Playgroud)
如何检索这两个令牌,以便可以重用它们来测试其他端点?我可以看到 cookie 位于 resp.header["set-cookie"] 下,但这是一个包含两个包含标记的字符串的数组。有没有更好的方法来简单地提取令牌?
Yag*_*ann 11
我知道已经晚了,但迟到总比不到好,最近我试图在我的 API 中进行相同类型的测试,所以我为访问 cookie 所做的只是从标头中提取它,如下所示:
it("should test /register for a valid request and return 201 status code and accessToken and refreshToken through cookies", async () => {
const resp = await request.post("/users/register").send(validUser)
const cookies = resp.headers['set-cookie']
console.log(cookies)
// your cookies will looks like this:
// [
// "accessToken=yourAccessToken",
// "refreshToken=yourRefreshToken"
]
})
Run Code Online (Sandbox Code Playgroud)
希望它可以帮助其他遇到同样问题的人!
| 归档时间: |
|
| 查看次数: |
3288 次 |
| 最近记录: |