Object.freeze()
, 객체 꼼짝마🥶export const ERROR_MESSAGE = Object.freeze({
CAR_NAME_MULTIPLE_INPUT: '자동차 이름을 최소 2개 이상 입력해주세요.',
CAR_NAME_LENGTH_RANGE: `자동차 이름은 1~5자까지 입력할 수 있습니다.`,
CAR_NAME_UNIQUE: '자동차 이름은 중복으로 입력할 수 없습니다.',
RACE_TIME_ONLY_NUMBER: '시도 횟수는 1 이상의 숫자만 입력할 수 있습니다.',
});
Object.freeze
가 왜 쓰는지 이해를 못했었는데 이번 주 JS Data Type을 공부하고 이해가 갑니다.const
선언을 해도 참조형 타입입니다. 따라서, mutable
한데요.Object.freeze()
감싸서 얼려버리는 모습입니다.private
, 나만 쓸꺼야🛡️class Car {
construct() {
#carNames = [];
#winnerNames = [];
}
#racingGameModel() {
...
};
#racingGameView() {
...
};
}
Heading Tag
, 찬물도 위아래가 있는 법👆👇Cypress Command
, test에서도 함수를 만들어봐요💯Demo Page/디렉토리 트리
, 남을 위한 배려👍dataset
, element에 정보를 담고 class 남용 멈춰!🚫<div class="car-${index} step-container"></div> // 흠... 뭐 하나 정도는 괜찮죠.
className
이 계속 불어어 난다고 생각해봐요. (끔찍)dataset
을 이용해서 어떤 데이터인지에 대해 라벨링
을 하는 연습을 해봅시다.인자를 객체로 넘기기
, 콜백지옥만 있는게 아니예요 (파라미터 지옥..🔥)다시 확인해야 하고...
waitRepeatedly({
selector: SELECTOR.$SPINNER,
type: 'be.visible',
delay: DELAY_TIME.RACING_PROGRESS,
repeatCount: racingCount,
});
XXS 방어? textcontent?
XXS 의 기본 방어하는 방법은 스크립트 삽입하는 방식으로 주로 발생하기 때문에 태그 코드로 사용되는 < , > 와 같은 문자를 이스케이프 처리된 텍스트로 변경하는 거라고 하네요. 그래서 textCotent만 사용해서는 안되고 위와 같은 처리를 별도로 해줘야 하는데 저희는 일단 이런 방법이 있다 정도만 알고 다음에 이러한 처리가 필요한 상황에서 적용해 보심 될 것 같아요!
textContent를 사용하면 태그는 제외하고 삽입되니 해결이 되는 줄 알았어요.. 🥲DOMPurify 라이브러리를 사용하면 된다고 하는데 추가적으로 학습을 해봐야겠어요! 감사합니다! 🙏🏼
이벤트 리스너 해제
, 앞 뒤가 다르면 쓰나'등록'과 '해제'를 함께
고려해줘야 해요.처음부터 listener를 익명함수가 아닌 접근 가능한 변수 내지 메서드로 빼두는 편
이 좋습니다.class Car {
...
$(SELECTOR.CAR_NAMES_FORM).addEventListener('submit', **this.carNameSubmitHandler**)
...
**carNamesSubmitHandler** = e => {
e.preventDefault();
...
}
}
beforeEach의 맹점
, 무지성 beforeEach? 이거 의도하지 않은 반복일지도..☠️연속되는 과정속에서의 동작 파악
을 기본으로 가져가는 것이 좋아요.(cy.visit)
A동작을 다시 한 번 수행해야 하는 번거로움이 따르겠죠.
before
로 넣어주면 좋을 것 같아요.
utils, constants 의미
, 엄연히 다릅니다↔utility
범용성 있는
도구가치가 덜 한 곳
일 수도 있죠.constant
일괄하여 취급할 필요가 있는 것들