#typescript #cookies #jestjs #supertest
Вопрос:
Я только начинаю с Шутки и пытаюсь протестировать 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()
})
})
})
Это конечная точка. Я тестирую этот материал, поэтому на самом деле отправляю токены как в теле ответа, так и в файлах 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))
}
})
Как я могу получить оба токена, чтобы использовать их повторно для тестирования других конечных точек? Я смог увидеть, что файлы cookie находятся под соответствующим заголовком[«set-cookie»], но это массив с двумя строками, содержащими токены. Есть ли лучший способ просто извлечь токены?