Deno oak에 테스트 코드를 작성하면서 cookie 설정이 특이하다는 점을 발견했습니다.
deno oak의 testing에서 set과 get은 서로 무관합니다. createMockContext
으로 만든 context
(이하 ctx
)는 ctx.cookies.set
으로 넣었다고 ctx.cookies.get
으로 꺼낼 수 있는 것은 아닙니다. 모두
미들웨어 컨트롤러
따라서 일반적인 흐름은 다음과 같습니다:
- 클라이언트가 요청을 보냄.
- 요청이 도달하면 미들웨어가 실행되어 전처리 작업 수행.
- 미들웨어는 요청을 검사하고 조작한 후, 컨트롤러에게 제어를 전달.
- 컨트롤러는 요청을 처리하고 필요한 작업을 수행.
- 컨트롤러는 응답을 생성하여 클라이언트에게 반환.
- 응답이 도달하면 미들웨어가 실행되어 후처리 작업 수행 및 응답을 클라이언트에게 전달.
ChatGPT에게 질문하고 얻은 답변입니다.
토큰 갱신 프론트엔드
토큰 갱신이 필요하다는 응답을 받으면 프론트엔드는 어떻게 처리하는지 궁금해졌습니다.
axios interceptors와 refresh token을 활용한 jwt 토큰 관리 - HyunGyu-Kim
잘 다룬 블로그를 발견했습니다.
Deno oak testing
Deno oak를 테스트하는 방법을 찾고 있었습니다.
oak cookie testing
cookie를 서버에서 설정하고 클라이언트가 요청 보낼 때마다 확인해야 하는데 이것을 어떻게 구현하는지 찾아보고 있었습니다.
fix: mocked contexts provide the cookies property #422 - oakserver / oak
Deno.test('should set cookie from mock context', async () => {
const hash = 'hash1234';
const ctx = createMockContext();
await ctx.cookies.set('sessionID', hash, { httpOnly: true });
assertEquals(
[...ctx.response.headers],
[['set-cookie', `sessionID=${hash}; path=/; httponly`]]
);
});
Deno.test('should get cookie from mock context', async () => {
const hash = 'hash1234';
const ctx = createMockContext({
headers: [['cookie', `sessionID=${hash};`]],
});
assertEquals(await ctx.cookies.get('sessionID'), hash);
});
테스트 코드가 더럽지만 일단 어떻게 작성해야 하는지 알 수 있습니다.
안풀리는 미스테리: Cookies 설정 불가
보통 토큰은 2개로 테스트합니다. 하지만 이것에 대한 테스트 코드가 별로 없는 것도 의외입니다.