-
Notifications
You must be signed in to change notification settings - Fork 89
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
[2단계 - 자주 가는 음식점] 해리(최현웅) 미션 제출합니다. #155
Changes from 51 commits
6f0d55a
13e87fa
5eb7e3e
ec3f055
72a62ee
c09a809
db3dea7
46653ca
41f1b08
a3b60ad
6d9f200
ecadfc6
b7329e5
188b413
f9f8200
77b8110
12ebc28
2d2b05e
5e184f6
dbd4317
794955c
4774765
6651777
d0caaf6
5435219
dafd4c6
75ea25d
e37988e
a1e1a89
003fa7c
c0158c9
0279431
8ecc48e
e52abc1
842dc67
f634e1c
05cbb0a
6660602
2660380
a695f12
b7852b8
bcb84ad
af74fab
b14dedd
b4ca733
eaf0992
d73df87
309dcca
fb86be6
c73d982
cd60e5f
97ceeea
e58c478
7501413
3fb961a
c3612a2
2f2cf84
323add7
8ec47cf
17691a0
42d0917
9e4b00f
1cb1d02
4d0c2f3
4599c6c
c701028
c5ade21
2bebec1
191f542
c818b2d
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
describe("음식점 상세 정보 테스트", () => { | ||
beforeEach(() => { | ||
cy.visit("/"); | ||
cy.get(".restaurant-list-container").children().first().click(); | ||
cy.get("#restaurant-detail-wrapper").should("have.class", "modal--open"); | ||
}); | ||
|
||
it("음식점 목록 중 하나의 음식점을 클릭하면, 해당 음식점 상세 정보를 보여주는 모달이 렌더링된다.", () => { | ||
cy.get("div.restaurant-detail").should("contain", "도스타코스 선릉점"); | ||
}); | ||
|
||
it("음식점 상세 정보를 보여주는 모달에서 닫기 버튼을 클릭하면 모달이 사라진다.", () => { | ||
cy.get("#detail-close-button").click(); | ||
|
||
cy.get("#restaurant-detail-wrapper").should("not.have.class", "modal--open"); | ||
}); | ||
|
||
it("음식점 상세 정보를 보여주는 모달에서 모달 영역 외부를 클릭하면 모달이 사라진다.", () => { | ||
cy.get("#restaurant-detail-backdrop").click("top", { | ||
force: true, | ||
}); | ||
|
||
cy.get("#restaurant-detail-wrapper").should("not.have.class", "modal--open"); | ||
}); | ||
|
||
it("음식점 상세 정보를 보여주는 모달에서 삭제하기 버튼을 클릭하면 해당 음식점은 사라져야한다.", () => { | ||
const EXPECTED_RESTAURANT_LENGTH = 5; | ||
|
||
cy.get("#delete-button").click(); | ||
|
||
cy.get(".restaurant-list-container").children().should("have.length", EXPECTED_RESTAURANT_LENGTH); | ||
cy.get("#restaurant-detail-wrapper").should("not.have.class", "modal--open"); | ||
|
||
cy.get(".restaurant-list-container").children().first().should("contain", "이태리키친"); | ||
}); | ||
}); |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,104 @@ | ||
const FILTERING_TEST_DATA = [ | ||
{ | ||
category: "한식", | ||
expectedRestaurantName: "피양콩 할마니", | ||
}, | ||
{ | ||
category: "아시안", | ||
expectedRestaurantName: "호아빈 삼성점", | ||
}, | ||
{ | ||
category: "일식", | ||
expectedRestaurantName: "잇쇼우", | ||
}, | ||
{ | ||
category: "중식", | ||
expectedRestaurantName: "친친", | ||
}, | ||
|
||
{ | ||
category: "양식", | ||
expectedRestaurantName: "이태리키친", | ||
}, | ||
{ | ||
category: "기타", | ||
expectedRestaurantName: "도스타코스 선릉점", | ||
}, | ||
]; | ||
|
||
describe("음식점 목록 테스트", () => { | ||
beforeEach(() => { | ||
cy.visit("/"); | ||
}); | ||
|
||
it("사용자가 처음 방문할 경우 기본 제공 음식점 목록이 렌더링된다", () => { | ||
const EXPECTED_RESTAURANT_LENGTH = 6; | ||
cy.get(".restaurant-list-container").children().should("have.length", EXPECTED_RESTAURANT_LENGTH); | ||
}); | ||
Comment on lines
+34
to
+37
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. 피그마에는 저 순서로 구성되어 있지만, 처음 점심 뭐 먹지 페이지에 방문했을 때 카테고리에 따라서 필터링하는 옵션은 |
||
|
||
it("사용자가 선택한 카테고리에 맞는 음식점 목록이 보여져야 한다.", () => { | ||
FILTERING_TEST_DATA.forEach(({ category, expectedRestaurantName }) => { | ||
const FILTERED_RESTAURANT_LIST = 1; | ||
|
||
cy.get("select#category-option-select").select(category); | ||
|
||
cy.get(".restaurant-list-container").children().should("have.length", FILTERED_RESTAURANT_LIST); | ||
cy.get(".restaurant-list-container").children().last().should("have.attr", "name", expectedRestaurantName); | ||
}); | ||
|
||
const EXPECTED_RESTAURANT_LENGTH = 6; | ||
cy.get("select#category-option-select").select("전체"); | ||
cy.get(".restaurant-list-container").children().should("have.length", EXPECTED_RESTAURANT_LENGTH); | ||
}); | ||
|
||
it("사용자가 이름순 정렬 옵션을 선택할 경우, 이름순으로 목록이 정렬된다", () => { | ||
const EXPECTED_NAME_SEQUENCE = ["도스타코스 선릉점", "친친", "잇쇼우", "피양콩 할마니", "호아빈 삼성점", "이태리키친"]; | ||
|
||
cy.get("select#sort-option-select").select("거리순"); | ||
|
||
cy.get(".restaurant-list-container") | ||
.children() | ||
.each((element, index) => { | ||
cy.wrap(element.attr("name")).should("equal", EXPECTED_NAME_SEQUENCE[index]); | ||
}); | ||
}); | ||
|
||
it("사용자가 거리순 정렬 옵션을 선택할 경우, 거리순으로 음식점 목록이 정렬된다", () => { | ||
const EXPECTED_NAME_SEQUENCE = ["도스타코스 선릉점", "이태리키친", "잇쇼우", "친친", "피양콩 할마니", "호아빈 삼성점"]; | ||
|
||
cy.get("select#sort-option-select").select("이름순"); | ||
|
||
cy.get(".restaurant-list-container") | ||
.children() | ||
.each((element, index) => { | ||
cy.wrap(element.attr("name")).should("equal", EXPECTED_NAME_SEQUENCE[index]); | ||
}); | ||
}); | ||
|
||
it("사용자가 별 아이콘을 클릭하면, 자주 가는 음식점 탭에서 확인할 수 있다.", () => { | ||
const EXPECTED_FAVORITE_RESTAURANT_LENGTH = 2; | ||
|
||
cy.get("favorite-icon").first().click(); | ||
cy.get("favorite-icon").last().click(); | ||
|
||
cy.get("restaurant-tab[text='자주 가는 음식점']").click(); | ||
|
||
cy.get(".restaurant-list-container").children().should("have.length", EXPECTED_FAVORITE_RESTAURANT_LENGTH); | ||
}); | ||
|
||
it("자주 가는 음식점 탭에서 별 아이콘을 클릭하면, 모든 음식점에서 탭에서만 확인할 수 있다.", () => { | ||
const EMPTY_FAVORITE_RESTAURANT_LENGTH = 0; | ||
|
||
cy.get("favorite-icon").first().click(); | ||
cy.get("favorite-icon").last().click(); | ||
|
||
cy.get("restaurant-tab[text='자주 가는 음식점']").click(); | ||
|
||
cy.get("favorite-icon").first().click(); | ||
cy.get("favorite-icon").last().click(); | ||
|
||
cy.get("restaurant-tab[text='자주 가는 음식점']").click(); | ||
|
||
cy.get(".restaurant-list-container").children().should("have.length", EMPTY_FAVORITE_RESTAURANT_LENGTH); | ||
}); | ||
}); |
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.
음식점 목록의 첫번째 음식점을 클릭하면,
이라는 표현은 어떨까요? beforeEach의 처음에first()
를 놓치면 전체적으로 맥락을 이해하기 어려울 것 같아요.그리고 역시 첫 번째 요소가 "도스타코스 선릉점(맛있겠다..)"임을 알아야 이해되는 테스트로 보여요. 같이 개선해보면 좋을 것 같아요 :)
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.
이런 방법으로 테스트 코드를 작성하면 디폴트 데이터가 바뀔 때마다 테스트 코드도 함께 수정해줘야겠군요...변경에 취약한 테스트 코드를 작성한 것 같아요.
테스트 코드가 통과되는데 아무 문제가 없도록 클래스 이름을 확인하는 것으로 테스트 케이스를 수정해봤습니다!