-
Notifications
You must be signed in to change notification settings - Fork 8
[TS] Webpack 환경에서 MSW v2 이슈
MSW가 http 요청을 가로채지 못했돠..
- useQuery를 사용하는 hook과 fetch 함수는 문제가 없음을 확인, api url도 확인하였다.
- MSW handler에서 console.log를 찍어보았는데, 찍히지 않았다.
→ MSW 서버가 제대로 동작하지 않음을 확인하였다.
vite 환경과 달리 webpack환경에서 msw v2의 이슈가 있음을 확인하였다. [공식문서](https://mswjs.io/docs/migrations/1.x-to-2.x/)에서도 이를 언급하였다(Frequent issues 부분)
하지만 공식문서의 해결방안을 그대로 따랐음에도 해결되지 않았따..
우선 원인은 기존의 node의 util의 TextDecoder, TextEncoder
가 호환이 되지 않는 이슈가 있어서, 따로 패키지를 받아 패키지의 TextDecoder, TextEncoder
를 오버라이딩해줘야하는듯 했다.
- jest.config.ts에 다음 옵션들을 추가한다.
setupFiles: ['./jest.polyfills.js'],
testEnvironmentOptions: {
customExportConditions: [''],
},
setupFilesAfterEnv: ['./setupTests.ts'],
-
jest.polyfills.js 파일은 config파일과 동등한 위치에 추가한다. 잘 보면 공식문서에서 제공하는 polyfills에서 더 추가된 부분이 있다. 해당 부분은 [버건디](https://github.com/woowacourse-teams/2024-devel-up/pull/83/files)의 도움으로 알게되었다.
const { ReadableStream, TransformStream } = require('node:stream/web'); const { TextDecoder, TextEncoder } = require('node:util'); Object.defineProperties(globalThis, { TextDecoder: { value: TextDecoder }, TextEncoder: { value: TextEncoder }, ReadableStream: { value: ReadableStream }, TransformStream: { value: TransformStream }, }); Object.defineProperties(globalThis, { TextDecoder: { value: TextDecoder }, TextEncoder: { value: TextEncoder }, ReadableStream: { value: ReadableStream }, }); const { Blob, File } = require('node:buffer'); const { fetch, Headers, FormData, Request, Response } = require('undici'); Object.defineProperties(globalThis, { fetch: { value: fetch, writable: true }, Blob: { value: Blob }, File: { value: File }, Headers: { value: Headers }, FormData: { value: FormData }, Request: { value: Request }, Response: { value: Response }, }); globalThis.setImmediate = (callback, ...args) => setTimeout(callback, 0, ...args); globalThis.clearImmediate = (immediateId) => { clearTimeout(immediateId); };
-
package.json에는 다음 두 패키지를 추가한다.
util 패키지는 공식문서에는 언급되지 않은 패키지이다. 하지만 해당 패키지를 설치하지 않고 공식문서 그대로만 한다면 node:util에서 TextDecoder, TextEncoder
이 두 친구를 찾지 못한다고 에러를 뱉었다.
"undici": "^6.19.2",
"util": "^0.12.5",
-
setupTests.ts 파일을 역시 config 파일과 동등한 위치에 생성해준다.(파일명이나 경로는 바꾸어도 된다. jest.config에서 올바른 경로로 수정만 해주자)
해당 파일에서 RTL의 jest-dom 패키지를 import하고 있으나 package.json에서는 해당 패키지를 설치하지 않았다. 그럼에도 동작하니 일단 넘어갔다. ㅎㅎ
생각해보니 setupTests를 제대로 작성해주지 않아서 MSW 서버가 제대로 동작하지 않았나? 하는 생각이 든다. 시간이 될 때 에러가 났던 환경에서 다시 시도해보면 좋겠으나 일단 넘어가자.
import { beforeAll, afterAll, afterEach } from '@jest/globals'; import '@testing-library/jest-dom'; // did'nt install this package yet import { server } from './src/mocks/server'; beforeAll(() => server.listen({ onUnhandledRequest: 'error' })); afterEach(() => server.resetHandlers()); afterAll(() => server.close());
-
이렇게 생성된 파일들이 ts에러나 eslint 에러가 난다면 적당히 exclude하여 에러를 제외시켜 주자.
이렇게까지 하면 http요청을 잘 가로채서 테스트코드가 통과한다.
(vite 짱..)
참고 문헌
- 백엔드 코드 컨벤션
- 백엔드 기술 스택 및 선정 이유
- 각종 인스턴스 설정 파일 및 구성 위치 가이드
- ERD (24.09.27)
- 백엔드 CI CD 동작 프로세스
- 로컬 DB 환경 설정
- 백엔드 로깅 전략
- 백엔드 로그 모니터링 구성도
- 스프링 메트릭 모니터링 구성도
- Flyway 로 스키마 관리
- 코드잽 서버 구성도
- Git Submodule 사용 메뉴얼
- 프론트엔드 코드 컨벤션
- 프론트엔드 기술 스택 및 선정 이유
- 프론트엔드 서비스 타겟 환경 및 브라우저 지원 범위 선정
- 프론트엔드 모니터링 및 디버깅 환경 구축
- 프론트엔드 테스트 목록
- 프론트엔드 라이브러리 기술 검토
- 프론트엔드 개발서버, 운영서버 빌드 및 배포 환경 구분
- 목표했던 타겟 환경과 디바이스에서 서비스 핵심 기능 동작 확인
- 프론트엔드 접근성 개선 보고서
- EC2 로그 확인 방법
- VSCode를 통한 EC2 인스턴스 SSH 연결 방법
- 터미널을 통한 EC2 인스턴스 SSH 연결 방법
- NGINX 설정 파일 접근 및 적용 방법
- DB 접속 및 백업 방법
- [QA] 배포 전 체크리스트
- CI 파이프라인 구축
- CD 파이프라인 구축
- 백엔드 CI CD 트러블슈팅
- Lombok Annotation Processor 의존성을 추가한 이유
- 2차 스프린트 기준 ERD
- DTO 검증하기
- ProblemDetail
- Fork된 레포지토리 PR에서 CI Secrets 접근 문제 해결
- AWS CloudWatch 모니터링
- 스프링 메트릭 모니터링 구축 방법
- 로깅과 Logback에 대해 알아보아요.
- 백엔드 CD 파이프라인 Ver.2
- 요청, 응답 로그에 correlationId 를 추가하자!
- 3차 스프린트 기준 ERD
- 더미데이터 생성하고 실행하기
- 쿼리 성능 개선 결과
- 테이블별 인덱스 설정 목록
- 사용자 증가 시 발생할 수 있는 문제 상황과 개선 방안
- k6를 사용한 서버 부하 테스트
- 6차 스프린트 기준 ERD
- Query Performance Improvement Results
- 테스트 전략 및 CI 설정
- CI CD 구조
- 배포 전, 로컬에서 로그인 기능 포함 테스트해보는 법
- stylelint 적용기
- 내 작업 브랜치 중간에 Merge된 동료의 작업물을 넣고 싶다면 pull vs rebase
- [TS] Webpack config
- [TS] Webpack 환경에서 MSW v2 이슈
- [TS] webpack에서 react‐router‐dom 적용 안됨
- 2024.07.28 새 기획 회의
- 2024.07.26 2차 데모데이 후 회의
- 2024.07.11 백엔드 논의 좀 할게요
- 2024.07.11 백엔드 ERD 회의
- 2024.07.09 깃 브랜치 전략, PR 템플릿 회의
- 2024.07.03 주제 선정 회의
- 2023.07.03 팀빌딩데이 킥오프 회의
- 2023.08.07 3차 스프린트 중간회고