[レベル1-タスク4]2次自動販売機タスクフィードバック
レベル1タスク4自販機タスク2段階PR
今回は評論家のフィードバックだけを持ってきました~
誰よりも速いウォルターのフィードバック...ウォルターさん、ありがとうございます.🙇♂️🙇♂️🙇♂️
💪 JS
上下水道が複雑なら分けましょう。
定数を複数のファイルに分離したことがない.しかし、
constants.ts
ファイルを初めていくつかのファイルに分けた.constants.TSには定数がたくさんあります(エラーメッセージ、アクション、Auth、...)
水道水が複雑になったら、分けなければなりません!
コードを構想に沿って作成しましょう。
一般的に
validate--
関数を見ると、どのような役割と戻り値を期待しますか?間違いない.入力したパラメータ値を検証し、有効であればtrueまたはfalseを返す可能性があります.
しかし、私は反対の戻り値を書いています.
// 에러 발생 시
new ValidationResult(true, '에러메세지');
// 에러가 발생하지 않을 시
new ValidationResult(false);
👆 ValidationResultの最初のパラメータはhasError
なので、trueでエラーが発生するように設計されています.しかし、一般的に
validate--
はtrue額面が有効であると考えられる.ウォルターのフィードバックに基づいて,
hasError
をpass
に変更しboolean値を反転した.private page routing
private pageは通常ルータによって制御される.
👇 構成部品をインストールし、変数に基づいてテンプレートを変更しないでください.
// in login-component.ts
if (!isLogin) {
return `<h2>🚫이 페이지는 관리자만 접근할 수 있습니다🚫 </h2>`;
}
👇 最初に権限がないことを라우터에서 판단
に変更してprivate pageをマウントします!// in router.ts
const accessiblePage = isLogin
? PAGE.PRODUCT_MANAGE_PAGE
:PAGE.ONLY_MANAGER_ACCESSIBLE_PAGE;
DOM直接指向id
const [$email, $password] = this.querySelectorAll('input');
👆 ピッピッピッピッピッピッピッピッピッピッピッピッピッピッピッピッテンプレートを何らかの理由で変更した場合(例えば、inputを一番前に追加した場合)、必要な操作を実行できますか?const $email = this.querySelector('#login-email-input') as HTMLInputElement;
const $password = this.querySelector('#login-password-input') as HTMLInputElement;
👆 IDを一人ずつ持ってきてくださいより安定する.(DOM構造への依存を避ける)不要なAPIリクエストの削減
😢 既存のコードでは、複数の
getUserInfo()
関数がAPI要求によって呼び出され、ユーザ情報が取得される.ウォルターは私にフィードバックして、私は1回だけgetUserInfoを呼ぶように変更しました!(一度だけ呼び出してstateにuser-infoを保存しました.)
😀 変更後、ウェブページでnavtabを移動する時間も短縮され、大きな効果が得られました…!
実際、前回のフィードバックでも
localStorage.getItem()
のようにコストの高いタスクを最小限に抑えるというフィードバックがありましたが、今回も変更できず、似たようなフィードバックを聞きました心に刻みましょう.APIリクエストやローカルストレージへのアクセスなど、高価なタスクを最小限に抑える.
APIエラーハンドル
ウォルターフィードバック:非同期リクエストの場合は必ずエラー処理を行います!
総じて非同期リクエストに対するエラー処理が不足しているようです.
動かない部分もあれば、間違いがあってできない場合もあります!
APIを取得する過程で,様々なhttp応答エラーが存在する.
しかしtry catch文を使用して取得しているものはありません...反省する🙇♂️🙇♂️
💪 Cypress
API test
外部APIを直接要求すると、テストは独立できません.
テストとは独立してAPIを処理しましょう.
CypressからAPIをブロックする
cy.intercept('POST', `${API}/login`, { fixture: 'response-ok' }).as('login');
someLogic() // 로그인을 위한 input 작성 및 로그인 form 제출 로직
cy.wait('@login');
このようにAPIをブロックすればcy.wait()
を処理できるcy.waitは適切に書かれていますよね?😀 粘性のない
cy.wait(1000)
を取り除くことができるのでとても役に立ちますCypressからログインを解除するエラー(feat.LocalStorage)
Question
Cypressはずっとログインしていないので、毎回beforeEach rollにログインしてテストします.なぜですか?
Answer
cypressでは、各テストがクッキーとlocalStorageを初期化し、複数のテストが同時に行われるとサイドフラップ効果が発生しないようにします.
👉 あ、私のログインインプリメンテーションはlocalStorageを使用しているので、localStorageの初期化に伴い、既存のログイン情報がクリアされました!
解決策を見つけた.
npm i --save-dev cypress-localstorage-commands
上記のようにパッケージまたはコマンドを使用します.jsでlocalStorageを保存する関数を直接作成すればいいです🤔 ただし、必須でない場合は、既存のcypressの意図に従ってlocalStorageを初期化するたびに安全になると思います.
Reference
この問題について([レベル1-タスク4]2次自動販売機タスクフィードバック), 我々は、より多くの情報をここで見つけました https://velog.io/@jhy979/레벨1-미션4-2단계-자판기-미션-피드백テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol