-
Notifications
You must be signed in to change notification settings - Fork 9
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
test: skip 처리한 테스트를 복원합니다 #98
Conversation
moresoo
commented
Jul 1, 2024
- 각 유닛 테스트마다 js module를 rest하고 동적으로 새로 불러와 js memory를 공유하지 않는 독립적인 테스트를 보장합니다.
- https://vitest.dev/api/vi.html#vi-resetmodules
afterEach(() => { | ||
vi.resetModules(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
13 번 라인에서 이미 해주고 있는 것 같아요~
vi.resetModules(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
감사합니다!
fix: 중복 코드 제거
test(`src를 지정하면 주어진 URL로 script를 로드한다`, async () => { | ||
test('src를 지정하면 주어진 URL로 script를 로드한다', async () => { | ||
const { loadBrandPay } = await import('./loadBrandPay'); | ||
const { NamespaceNotAvailableError } = await import('@tosspayments/sdk-loader'); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이 에러는 import 하지 않아도 될 것 같아요.
이 케이스의 목적은 "주어진 url 로 script 로드를 잘 했는지"를 검증하는 것이기 때문에, 에러 처리는 불필요하고 아래 expect 구문이면 충분하다고 보여요~
expect(script).not.toBeNull(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
동의합니다! 추가로 script-loader 에러들은 밖으로 내보내지 않도록 수정했어요! 👍 6ce9a1e
@@ -45,6 +43,8 @@ describe.todo('loadScript', () => { | |||
|
|||
describe('기본 동작', () => { | |||
test('script 로드가 완료되면, 주어진 namespace에 생성된 인스턴스와 동일한 인스턴스를 resolve 해야한다', async () => { | |||
const { loadScript } = await import('./loadScript'); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
loadScript 테스트를 좀 더 순수하게 작성해보면 어떨까요?
describe scope 에 로컬 변수가 있다면 잠재적인 side effect 가 있다고 보여져서요~
browser-sdk/packages/sdk-loader/src/loadScript.test.ts
Lines 10 to 15 in f0807f1
// NOTE: load, error 이벤트를 임의로 발생시키기 위해 이벤트 리스터를 모킹합니다 | |
let eventListeners1: { [key: string]: EventListener }; | |
let eventListeners2: { [key: string]: EventListener }; | |
let script1: HTMLScriptElement; | |
let script2: HTMLScriptElement; |
아래처럼 케이스 내부에서만 관심사를 제한할 수 있을 것 같아요~
const { script } = mockScriptElement();
// when
const promise = loadScript(...);
window.TossPayments = { name: 'mocked-sdk' };
script.dispatchEvent('new Event('load'));
// actual
expect(promise).resolves.toBe({ name: 'mocked-sdk' });
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
말씀대로 유틸로 뺴서 순수하게 작성하는 게 좋은 것 같아요~! 반영했습니다! 👍
refactor: script element mock 유틸 활용
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
마이너 의견이라 LGTM 입니다~ 👍
* feat: TossPayments browser-sdk V2 (#94) * feat: tosspayment browser sdk v2 스캐폴딩 * chore: public-interface를 import 하기 위해 npm 개발망 바라보게 수정 * chore: typescript version up to 5.2.2 * chore: yarn version 3.6.4 & yarn dlx update * chore: TossPayment namespace type declare * rename * chore: package json update * chore(release): publish [skip ci] - @tosspayments/[email protected] * rename * chore: 불필요한 dependency dev로 옮기기 * rename * rename * feat: ANONYMOUS PI에 정의한 상수로 내보내기 * test: 테스트 추가 * chore: ANONYMOUS 내보내야 해서 dependecy로 승격 * chore: ANONYMOUS는 SDK에서 내보내주고 있어서 browser-sdk에서 내보내줄 필요 없음 * chore: typescript version up to 5.2.2 all packages * chore: TossPayments 글로벌 타입 하드코딩 제거 * chore: @ts-ignore * chore: readme 수정 * test: 테스트 삭제 (vitest로 교체 예정) * chore: 테스트 도구 jest -> vitest로 변경 * test: v2 tosspayment sdk 테스트 작성 * chore: v1 payment 테스트 수정 * chore: test CI 깨지는 곳 수정 * chore: CI의 node version을 변경합니다 * BREAKING CHANGE(sdk-loader): loadScript v2 (#95) * chore: typescript version up * chore: ts가 __dirname 못 읽는 이슈 * feat: 테스트 요구사항 작성 * test: script 로드가 완료되면, 주어진 namespace에 생성된 인스턴스와 동일한 인스턴스를 resolve 해야한다 * test: script.onload가 안돼서, 이벤트리스너를 mocking 합니다 * test: SDK가 인스턴스를 생성하고 -> script 로드 가 알맞은 순서 * feat: script 로드가 완료되면, 주어진 namespace에 생성된 인스턴스와 동일한 인스턴스를 resolve 해야한다 * test: script 로드를 실패하면, Promise를 초기화하고 에러를 throw 해야한다 * feat: script 로드를 실패하면, Promise를 초기화하고 에러를 throw 해야한다 * test: script 로드를 성공했지만 namespace에 인스턴스가 존재하지 않으면, 에러를 throw 해야한다 * feat: script 로드를 성공했지만 namespace에 인스턴스가 존재하지 않으면, 에러를 throw 해야한다 * chore: test namespace 변경 * feat: document.head.appendChild 추가하고 테스트에선 동작 안하게 모킹 * test: 캐시된 script 로더 Promise가 존재하면, 해당 Promise를 반환해야 한다 * feat: 캐시된 script 로더 Promise가 존재하면, 해당 Promise를 반환해야 한다 * refactor: 공통 테스트 모킹 로직 beforeEach로 뺌 * test: 캐시된 script 로더 Promise가 존재하지 않으면, SSR 환경이면 null을 resolve 해야한다 * faet: 캐시된 script 로더 Promise가 존재하지 않으면, SSR 환경이면 null을 resolve 해야한다 * tset: 주어진 namespace에 인스턴스가 존재하면, 해당 인스턴스를 resolve 해야한다 * feat: 주어진 namespace에 인스턴스가 존재하면, 해당 인스턴스를 resolve 해야한다 * chore: edit gitignore * chore: given when then * test: priority 옵션을 설정하면, script element의 fetchPriority 속성이 설정되어야 한다 * feat: priority 옵션을 설정하면, script element의 fetchPriority 속성이 설정되어야 한다 * refactor: 코드 가독성 * feat: Promise가 reject 됐을때 cachedPromise가 null로 reset 되도록 합니다 * feat: 기존 src를 가진 script가 존재하면, 기존 script의 이벤트를 모두 제거하고 스크립트도 제거한 후 새로 만들어야 한다 * BREAKING CHANGE: 기존 코드 삭제 * chore(release): publish [skip ci] - @tosspayments/[email protected] - @tosspayments/[email protected] - @tosspayments/[email protected] - @tosspayments/[email protected] - @tosspayments/[email protected] * chore(release): publish [skip ci] - @tosspayments/[email protected] - @tosspayments/[email protected] - @tosspayments/[email protected] - @tosspayments/[email protected] - @tosspayments/[email protected] * yarn * chore: typescript 5.5.2 -> 5.2.2 (오타) * test: 테스트 꺠지는 곳 수정 * feat: script-loader에서 발생하는 예외 에러들 추상화하고 테스트에서 활용 * test: v1 브랜드페이, v1 위젯에도 테스트 추가 * choree: script-loader 분기마다 주석 추가 * chore * chore: 테스트 유틸을 export 하는 걸 제거하고, 관련된 test를 임시로 skip 합니다. (#96) * chore: browser SDK의 패키지들을 지정한 버전으로 배포되도록 합니다 (#97) * chore(release): publish [skip ci] - @tosspayments/[email protected] - @tosspayments/[email protected] - @tosspayments/[email protected] - @tosspayments/[email protected] - @tosspayments/[email protected] * chore: browser-sdk test with alpha 3.0 * chore: 각 패키지 manual version up * chore: 변경사항이 없더라고 지정된 버전으로 강제로 version up 하도록 ci 설정을 변경합니다 * chore: standard-public-interface update * chore: ci에서 버전업 하는 스크립트를 제거하고, package에 명시된 버전으로 publish 하도록 임시로 설정 * chore: 주석 추가 * test: skip 처리한 테스트를 복원합니다 (#98) * test: skip 처리한 테스트를 복원합니다 * test: 테스트 복원 누락 * fix: 중복 코드 제거 * refactor: 테스트 리팩토링 (#99) * refactor: script element mock 유틸 활용 * refactor: SDK load 테스트에서 NamespaceNotAvailableError 에러 관련 검증을 하지 않는다 * chore: end of line * chore: end of line * chore: Public Interface version up (#100) * chore: public interface versino up * chore: export convention * refactor: 테스트 리팩토링 (#102) * refactor: addEventListener를 목킹하는 대신, dispatchEvent 메소드를 사용 * refactor: document.createElement mocking은 유틸 내에서 공통으로 처리한다 * chore: 누락