Skip to content
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 테스트 #172

Merged
merged 4 commits into from
Aug 31, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
108 changes: 108 additions & 0 deletions frontend/cypress/e2e/application.other-questions.cy.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
describe("기타 질문 사항 e2e 테스트", () => {
beforeEach(() => {
cy.viewport(1200, 900);

cy.goOtherQuestions();
Copy link
Collaborator

@geongyu09 geongyu09 Aug 29, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

혹시 이동하는 로직을 함수로 뺀 이유가 있을까요?
분명히 가독성이 좋아지는 느낌이 들지만, 올바른 추상화일지에 대해서는 약간 의문이 남는 것 같긴 합니다..! 다른 분들은 어떻게 생각하시나요?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

beforeEach 문에 페이지를 이동하는 로직을 하는 것보다는 commands 파일에 페이지를 이동하는 함수를 정의해서 사용하는 것이 좋다고 생각합니다.


cy.get("label")
.contains(
"학업 외에 병행하고 있거나 향후 계획 중에 있는 활동이 있으시다면 서술해 주세요.*"
)
.parent()
.next("input")
.as("plan");

cy.get("span")
.contains("지원 경로(중복 선택 가능)*")
.parent()
.next()
.contains("label", "학과 공지사항")
.as("announcement");

cy.get("span")
.contains("지원 경로(중복 선택 가능)*")
.parent()
.next()
.contains("label", "인스타그램")
.as("instagram");

cy.get("span")
.contains("지원 경로(중복 선택 가능)*")
.parent()
.next()
.contains("label", "기타")
.as("etc");

cy.get("span")
.contains("자기소개 및 에코노베이션에 지원하게 된 계기를 서술해 주세요.")
.as("nextPage");

cy.get("button").contains("다음").as("nextButton");
});

it("사용자는 향후 계획활동을 기입할 수 있다.", () => {
cy.get("@plan").type("프로젝트").should("have.value", "프로젝트").clear();
});

it("사용자는 지원 경로를 중복으로 선택가능하다.", () => {
cy.get("@announcement").click();
cy.get("@instagram").click();
cy.get("@announcement")
.should("have.class", "text-white")
.click()
.should("not.have.class", "text-white");
cy.get("@instagram")
.should("have.class", "text-white")
.click()
.should("not.have.class", "text-white");
Copy link
Collaborator

@geongyu09 geongyu09 Aug 29, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

개인적으로 "지원 경로를 중복으로 선택 가능하다" 라는 테스트케이스에서 assert 부분이, 동일한 버튼을 2번 클릭 후 선택되지 않음을 확인하는 것은 올바르지 않는 테스트이지 않을까 생각합니다..!

다른 버튼 2개 이상 클릭 후 클릭한 것들이 올바르게 선택 되었는지를 확인하는 방향이 더 올바르지 않을까 생각합니다!

제가 잘못 확인한 부분이었네요..! 중간 부분에 should부분을 확인을 못했습니다..!
아침에 일어나자마자 확인해서 정신이 없었나 봅니다 ㅎㅎ

});

it("사용자는 지원 경로에서 기타를 선택할 경우 기타 지원 경로에 관한 내용을 입력할 수 있다.", () => {
cy.get("@etc").click();
cy.get('input[placeholder="내용을 입력해주세요."]')
.type("dev")
.should("have.value", "dev")
.clear();
cy.get("@etc").should("have.class", "text-white").click();
});

it("사용자는 아무것도 작성 및 선택하지 말고 다음버튼을 누를 시, “필수 질문을 작성해주세요.”라는 alert창이 뜬다.", () => {
cy.checkAlert("필수 질문을 작성해주세요.");
cy.get("@nextButton").click();
});

it("사용자는 향후 계획활동을 기입하지 않고 다음버튼을 누를 시, “필수 질문을 작성해주세요.”라는 alert창이 뜬다. (지원경로 선택 = true)", () => {
cy.checkAlert("필수 질문을 작성해주세요.");
cy.get("@announcement").click();
cy.get("@nextButton").click();
});

it("사용자는 지원경로를 선택하지 않고 다음버튼을 누를 시, “지원경로를 선택해주세요.”라는 alert창이 뜬다. (향후 계획활동 작성 = true)", () => {
cy.checkAlert("지원 경로를 선택해주세요.");
cy.get("@plan").type("프로젝트").should("have.value", "프로젝트");
cy.get("@nextButton").click();
});

it("사용자는 지원경로 중 “기타” 만 선택하고 다음버튼을 누를 시, “지원경로를 선택해주세요.”라는 alert창이 뜬다. (향후 계획활동 작성 = true)", () => {
cy.checkAlert("지원 경로를 선택해주세요.");
cy.get("@plan").type("프로젝트").should("have.value", "프로젝트");
cy.get("@etc").click();
cy.get("@nextButton").click();
});

it("사용자는 “기타”가 아닌 지원경로 하나 이상과, “기타”를 선택하고 다음버튼을 누를 시, 다음 페이지로 넘어간다. (향후 계획활동 작성 = true, 지원경로 선택 = true )", () => {
cy.get("@plan").type("프로젝트").should("have.value", "프로젝트");
cy.get("@announcement").click();
cy.get("@etc").click();
cy.get("@nextButton").click();
cy.get("@nextPage").should("have.class", "text-black");
});

it("사용자는 지원경로 중 “기타”만 선택하고 기타에 관한 내용을 기입한 이후, 다음 버튼을 누를 시, 다음페이지로 넘어간다. (향후 계획활동 작성 = true, 지원 경로 선택 = true)", () => {
cy.get("@plan").type("프로젝트").should("have.value", "프로젝트");
cy.get("@etc").click();
cy.get('input[placeholder="내용을 입력해주세요."]').type("dev");
cy.get("@nextButton").click();
cy.get("@nextPage").should("have.class", "text-black");
});
});
13 changes: 13 additions & 0 deletions frontend/cypress/support/commands.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ declare namespace Cypress {
checkLocalStorage(key: string, expectedValue: string): Chainable<void>;
checkAlert(expectedValue: string): Chainable<void>;
goSecondPersonalInformation(): Chainable<void>;
goOtherQuestions(): Chainable<void>;
}
}

Expand Down Expand Up @@ -34,6 +35,7 @@ Cypress.Commands.add("goSecondPersonalInformation", () => {
.contains("label", "APP")
.should("exist")
.click();
cy.wait(1000);
cy.get("span")
.filter((index, element) => Cypress.$(element).text().trim() === "2순위")
.next()
Expand Down Expand Up @@ -73,3 +75,14 @@ Cypress.Commands.add("goSecondPersonalInformation", () => {
cy.get("label").contains("2학기").should("exist").click();
cy.get("button").contains("다음").should("exist").click();
});

Cypress.Commands.add("goOtherQuestions", () => {
cy.goSecondPersonalInformation();
cy.get("span")
.filter((index, element) => Cypress.$(element).text().trim() === "전공*")
.parent()
.next("input")
.type("컴퓨터정보통신공학과");

cy.get("button").contains("다음").click();
});