-
Notifications
You must be signed in to change notification settings - Fork 1
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: 신청폼 희망분야 페이지 e2e 테스트 작성 #166
Changes from 1 commit
6ea413b
aa4e60f
4331b41
5e75016
8a632b0
f4154af
bd49dcc
ba878f4
6cfa910
66ee0cb
f41c310
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
- Loading branch information
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,15 +1,16 @@ | ||
describe("chaoter", () => { | ||
describe("chapter", () => { | ||
beforeEach(() => { | ||
cy.clearAllCookies(); | ||
cy.clearLocalStorage(); | ||
cy.clearAllSessionStorage(); | ||
|
||
cy.viewport(1920, 1080); | ||
cy.visit("http://localhost:3000/application"); | ||
}); | ||
|
||
describe("초기 상태(처음 진입시, 로컬 데이터가 없는 상태)에서", () => { | ||
it("질문 제목 네비게이션 클릭시 “필수 질문을 작성해주세요.” 알람창이 뜬다. ", () => { | ||
cy.get(".pl-12 > :nth-child(2) > .text-base").click(); | ||
cy.get("button").contains("기본 인적 사항을 입력해주세요.").click(); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 테스트 없이 개발할 때는 몰랐지만, 여기서 "기본 인적 사항을 입력해주세요"와 같은 string들은 constants라는 폴더에 한번에 다룬다면 나중에 2군데, 3군데 수정 없이 작동할 것 같다라는 생각이 드네요(이래서 따로 빼는거였나...?) There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 맞아요 조금 반복되는 부분이 있는 것 같습니다..! |
||
|
||
cy.on("window:alert", (str) => { | ||
expect(str).to.equal("필수 질문을 작성해주세요."); | ||
|
@@ -24,54 +25,57 @@ describe("chaoter", () => { | |
}); | ||
describe("개발자(디자이너/기획)를 누르면", () => { | ||
beforeEach(() => { | ||
cy.get('[for=":R1rdlddda:"]').click(); | ||
cy.get("label").contains("개발자").click(); | ||
}); | ||
it("질문 제목 네이게이션에서 개발자(디자이너/기획자)에 대한 질문들을 볼 수 있다.", () => { | ||
cy.get(":nth-child(5) > .text-base").should( | ||
"have.text", | ||
"자기소개 및 에코노베이션에 지원하게 된 계기를 서술해 주세요." | ||
); | ||
cy.get(":nth-child(6) > .text-base").should( | ||
"have.text", | ||
"개발자를 희망하는 이유는 무엇인가요?" | ||
); | ||
cy.get(":nth-child(7) > .text-base").should( | ||
"have.text", | ||
"소프트웨어 프로젝트에서 주도적으로 개발한 경험이 있나요?" | ||
); | ||
cy.get(":nth-child(8) > .text-base").should( | ||
"have.text", | ||
"어떤 일에 도전하고 실패해 본 경험이 있나요?" | ||
); | ||
cy.get(":nth-child(9) > .text-base").should( | ||
"have.text", | ||
"무언가에 깊게 빠지거나 파고 들어본 적이 있나요?" | ||
); | ||
cy.get(":nth-child(10) > .text-base").should( | ||
"have.text", | ||
"협업(프로젝트, 팀 활동)에 있어서 가장 중요하다고 생각되는 것은 무엇인지 서술해 주세요." | ||
); | ||
cy.get(":nth-child(11) > .text-base").should( | ||
"have.text", | ||
"에코노베이션에 들어오게 된다면 어떤 목표와 학습 계획을 바탕으로 활동하고 싶나요?" | ||
); | ||
cy.get(":nth-child(12) > .text-base").should( | ||
"have.text", | ||
"자신을 어필할 수 있는 포트폴리오를 업로드해주세요." | ||
); | ||
cy.get(":nth-child(13) > .text-base").should( | ||
"have.text", | ||
"개인정보 수집에 관한 안내 및 개인정보 수집" | ||
); | ||
cy.get(":nth-child(14) > .text-base").should( | ||
"have.text", | ||
"면접 가능시간을 선택해주세요.(중복 선택 가능)" | ||
); | ||
cy.get("span") | ||
.contains( | ||
"자기소개 및 에코노베이션에 지원하게 된 계기를 서술해 주세요." | ||
) | ||
.should("exist"); | ||
|
||
cy.get("span") | ||
.contains("개발자를 희망하는 이유는 무엇인가요?") | ||
.should("exist"); | ||
|
||
cy.get("span") | ||
.contains("소프트웨어 프로젝트에서 주도적으로 개발한 경험이 있나요?") | ||
.should("exist"); | ||
|
||
cy.get("span") | ||
.contains("어떤 일에 도전하고 실패해 본 경험이 있나요?") | ||
.should("exist"); | ||
|
||
cy.get("span") | ||
.contains("무언가에 깊게 빠지거나 파고 들어본 적이 있나요?") | ||
.should("exist"); | ||
|
||
cy.get("span") | ||
.contains( | ||
"협업(프로젝트, 팀 활동)에 있어서 가장 중요하다고 생각되는 것은 무엇인지 서술해 주세요." | ||
) | ||
.should("exist"); | ||
|
||
cy.get("span") | ||
.contains( | ||
"에코노베이션에 들어오게 된다면 어떤 목표와 학습 계획을 바탕으로 활동하고 싶나요?" | ||
) | ||
.should("exist"); | ||
|
||
cy.get("span") | ||
.contains("자신을 어필할 수 있는 포트폴리오를 업로드해주세요.") | ||
.should("exist"); | ||
|
||
cy.get("span") | ||
.contains("개인정보 수집에 관한 안내 및 개인정보 수집") | ||
.should("exist"); | ||
|
||
cy.get("span") | ||
.contains("개인정보 수집에 관한 안내 및 개인정보 수집") | ||
.should("exist"); | ||
}); | ||
it("질문 제목 네이게이션 클릭 시 “필수 질문을 작성해주세요.” alert창이 뜬다. ", () => { | ||
cy.get(".pl-12 > :nth-child(3) > .text-base").click({ | ||
force: true, | ||
}); | ||
cy.get("button").contains("기본 인적 사항을 입력해주세요.").click(); | ||
|
||
cy.on("window:alert", (str) => { | ||
expect(str).to.equal("필수 질문을 작성해주세요."); | ||
|
@@ -87,48 +91,32 @@ describe("chaoter", () => { | |
|
||
describe("1순위 분야를 선택하면", () => { | ||
beforeEach(() => { | ||
cy.get('[for=":R2tdlddda:"]').click(); | ||
cy.get("label").contains("APP").click(); | ||
}); | ||
it("2순위로는 동일한 분야를 선택할 수 없다.", () => { | ||
cy.get(".bg-gray-200").click(); | ||
|
||
cy.window().then((win) => { | ||
const SelectedSecondChapter = win.localStorage.getItem("field2"); | ||
expect(SelectedSecondChapter).to.equal('""'); | ||
}); | ||
cy.checkLocalStorage("field2", '""'); | ||
}); | ||
describe("2순위를 선택한 후", () => { | ||
beforeEach(() => { | ||
cy.get('[for=":r1:"]').click(); | ||
}); | ||
it("2순위와 동일한 분야를 1순위에서 선택할 수 없다.", () => { | ||
cy.window() | ||
.then((win) => { | ||
const 첫번째_순위_직군을_선택하였을_때_1순위_데이터가_담긴_로컬스토리지 = | ||
win.localStorage.getItem("field1"); | ||
expect( | ||
첫번째_순위_직군을_선택하였을_때_1순위_데이터가_담긴_로컬스토리지 | ||
).to.equal('"APP"'); | ||
}) | ||
.then(() => { | ||
cy.get(":nth-child(2) > .bg-gray-200").click(); | ||
|
||
cy.window().then((win) => { | ||
const 두번째_순위_직군을_선택한_이후_1순위_데이터가_담긴_로컬스토리지 = | ||
win.localStorage.getItem("field1"); | ||
expect( | ||
두번째_순위_직군을_선택한_이후_1순위_데이터가_담긴_로컬스토리지 | ||
).to.equal('"APP"'); | ||
}); | ||
}); | ||
const expectedField = '"APP"'; | ||
const secondFieldSelector = ":nth-child(2) > .bg-gray-200"; | ||
|
||
cy.checkLocalStorage("field1", expectedField); | ||
|
||
cy.get(secondFieldSelector).click(); | ||
|
||
cy.checkLocalStorage("field1", expectedField); | ||
}); | ||
|
||
it("선택하지 않는 분야를 1순위에서 선택시 2순위 선택이 풀린다", () => { | ||
cy.get('[for=":R6tdlddda:"]').click(); | ||
cy.get("label").contains("AI").click(); | ||
|
||
cy.window().then((win) => { | ||
const SelectedSecondChapter = win.localStorage.getItem("field2"); | ||
expect(SelectedSecondChapter).to.equal('""'); | ||
}); | ||
cy.checkLocalStorage("field2", '""'); | ||
}); | ||
it("다음 버튼을 누르면 다음 질문(기본 인적사항)으로 넘어간다.", () => { | ||
cy.get("button").contains("다음").should("exist").click(); | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,37 +1,24 @@ | ||
/// <reference types="cypress" /> | ||
// *********************************************** | ||
// This example commands.ts shows you how to | ||
// create various custom commands and overwrite | ||
// existing commands. | ||
// | ||
// For more comprehensive examples of custom | ||
// commands please read more here: | ||
// https://on.cypress.io/custom-commands | ||
// *********************************************** | ||
// | ||
// | ||
// -- This is a parent command -- | ||
// Cypress.Commands.add('login', (email, password) => { ... }) | ||
// | ||
// | ||
// -- This is a child command -- | ||
// Cypress.Commands.add('drag', { prevSubject: 'element'}, (subject, options) => { ... }) | ||
// | ||
// | ||
// -- This is a dual command -- | ||
// Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... }) | ||
// | ||
// | ||
// -- This will overwrite an existing command -- | ||
// Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... }) | ||
// | ||
// declare global { | ||
// namespace Cypress { | ||
// interface Chainable { | ||
// login(email: string, password: string): Chainable<void> | ||
// drag(subject: string, options?: Partial<TypeOptions>): Chainable<Element> | ||
// dismiss(subject: string, options?: Partial<TypeOptions>): Chainable<Element> | ||
// visit(originalFn: CommandOriginalFn, url: string, options: Partial<VisitOptions>): Chainable<Element> | ||
// } | ||
// } | ||
// } | ||
|
||
declare namespace Cypress { | ||
interface Chainable<Subject> { | ||
checkLocalStorage(key: string, expectedValue: string): Chainable<void>; | ||
checkAlert(expectedValue: string): Chainable<void>; | ||
} | ||
} | ||
|
||
Cypress.Commands.add( | ||
"checkLocalStorage", | ||
(key: string, expectedValue: string) => { | ||
cy.window().then((win) => { | ||
const actualValue = win.localStorage.getItem(key); | ||
expect(actualValue).to.equal(expectedValue); | ||
}); | ||
} | ||
); | ||
Comment on lines
+11
to
+19
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 로컬 스토리지를 확인하는 코드 좋네요. 저도 merge후에 사용하겠습니다 ! There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 좋습니다! There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 좋은 추상화네요 👍 |
||
|
||
Cypress.Commands.add("checkAlert", (expectedValue: string) => { | ||
cy.on("window:alert", (str) => { | ||
expect(str).to.equal(expectedValue); | ||
}); | ||
Comment on lines
+11
to
+24
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 오... 먼가 flux 패턴같은 느낌.... redux같은 느낌의 코드이군요 ㅋㅋㅋ
Comment on lines
+21
to
+24
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 저는 alert 창의 내용을 콘솔창에 출력되도록만 했는데 alert 창의 내용까지 검증하는 코드 굉장히 좋은 것 같아요. |
||
}); |
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.
먼가... 이 또한 어떤 것임을 알려주는 describe면 좋겠군요...(저는 사실 회의를 참여 하지 않아서 제 3자라고 생각하고 보십쇼)
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.
아 해당 부분은 수정이 필요한게 맞습니다.. 저만 올바르게 작성하지 않았네요