-
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단계 - 음식점 목록] 윤생(이윤성) 미션 제출합니다. #53
Changes from 31 commits
48e1f38
dfe8c69
d46d6a0
7a8e9a2
a4d4ec4
e888f73
32531f0
07e7399
9b57870
78e877d
481bc98
7bf79aa
92c8d10
e98102d
aa9f6aa
f19afb9
e068708
aaa83f4
d4af145
4d1c79a
fd53765
c72bde7
1985331
65b1a56
734535a
523f93e
944a231
9d2bb91
3e41b7a
0b92bc4
2bea033
aea911b
0188bdd
44c14bf
00abc75
f5c12a8
a3fa9b1
8b8d4a0
959dc93
b6a6485
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,9 @@ | ||
import { defineConfig } from "cypress"; | ||
|
||
export default defineConfig({ | ||
e2e: { | ||
setupNodeEvents(on, config) { | ||
// implement node event listeners here | ||
}, | ||
}, | ||
}); |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,151 @@ | ||
export const CATEGORY_TEST_CASE = [ | ||
{ | ||
id: 0, | ||
category: '한식', | ||
name: '가_한식', | ||
distance: '30', | ||
description: '가_한식입니다.', | ||
link: 'http://www.naver.com', | ||
isFavorite: false, | ||
}, | ||
{ | ||
id: 1, | ||
category: '한식', | ||
name: '나_한식', | ||
distance: '15', | ||
description: '나_한식입니다.', | ||
link: 'http://www.naver.com', | ||
isFavorite: false, | ||
}, | ||
{ | ||
id: 2, | ||
category: '중식', | ||
name: '다_중식', | ||
distance: '10', | ||
description: '다_중식입니다.', | ||
link: 'http://www.naver.com', | ||
isFavorite: false, | ||
}, | ||
{ | ||
id: 3, | ||
category: '일식', | ||
name: '라_일식', | ||
distance: '5', | ||
description: '라_일식입니다', | ||
link: '', | ||
isFavorite: false, | ||
}, | ||
{ | ||
id: 4, | ||
category: '양식', | ||
name: '하_오분거리 양식', | ||
distance: '5', | ||
description: '5분거리', | ||
link: '', | ||
isFavorite: false, | ||
}, | ||
{ | ||
id: 5, | ||
category: '아시안', | ||
name: '하_오분거리 아시안', | ||
distance: '5', | ||
description: '5분거리', | ||
link: '', | ||
isFavorite: false, | ||
}, | ||
]; | ||
|
||
export const SORTING_TEST_CASE = [ | ||
{ | ||
id: 0, | ||
category: '한식', | ||
name: '다섯번째 거리', | ||
distance: '30', | ||
description: '한식입니다.', | ||
link: 'http://www.naver.com', | ||
isFavorite: false, | ||
}, | ||
{ | ||
id: 1, | ||
category: '한식', | ||
name: '세번째 거리', | ||
distance: '15', | ||
description: '한식입니다.', | ||
link: 'http://www.naver.com', | ||
isFavorite: false, | ||
}, | ||
{ | ||
id: 2, | ||
category: '한식', | ||
name: '두번째 거리', | ||
distance: '10', | ||
description: '한식입니다.', | ||
link: 'http://www.naver.com', | ||
isFavorite: false, | ||
}, | ||
{ | ||
id: 3, | ||
category: '한식', | ||
name: '네번째 거리', | ||
distance: '20', | ||
description: '한식입니다.', | ||
link: 'http://www.naver.com', | ||
isFavorite: false, | ||
}, | ||
{ | ||
id: 4, | ||
category: '한식', | ||
name: '첫번째 거리', | ||
distance: '5', | ||
description: '한식입니다.', | ||
link: 'http://www.naver.com', | ||
isFavorite: false, | ||
}, | ||
]; | ||
|
||
export const FAVORITES_TEST_CASE = [ | ||
{ | ||
id: 0, | ||
category: '한식', | ||
name: '매우_좋아요', | ||
distance: '5', | ||
description: 'good', | ||
link: 'http://www.naver.com', | ||
isFavorite: false, | ||
}, | ||
{ | ||
id: 1, | ||
category: '한식', | ||
name: '안좋아요', | ||
distance: '5', | ||
description: 'good', | ||
link: 'http://www.naver.com', | ||
isFavorite: false, | ||
}, | ||
{ | ||
id: 2, | ||
category: '한식', | ||
name: '안좋아요', | ||
distance: '5', | ||
description: 'good', | ||
link: 'http://www.naver.com', | ||
isFavorite: false, | ||
}, | ||
{ | ||
id: 3, | ||
category: '한식', | ||
name: '안좋아요', | ||
distance: '5', | ||
description: 'good', | ||
link: 'http://www.naver.com', | ||
isFavorite: false, | ||
}, | ||
]; | ||
|
||
export const RESTAURANT_INPUT_CASE = { | ||
category: '한식', | ||
name: '얌샘김밥', | ||
distance: '5', | ||
description: 'good', | ||
link: 'http://www.naver.com', | ||
}; |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,170 @@ | ||
import { | ||
CATEGORY_TEST_CASE, | ||
FAVORITES_TEST_CASE, | ||
SORTING_TEST_CASE, | ||
RESTAURANT_INPUT_CASE, | ||
} from '../data'; | ||
|
||
const TEST_URL = 'http://localhost:8080/'; | ||
|
||
describe('음식점 추가 창', () => { | ||
it('음식점 추가버튼(우측 상단)을 클릭하면 음식점 추가창을 볼 수 있다.', () => { | ||
cy.visit(TEST_URL); | ||
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. 저번에 이러한 코드를 beforeEach로 줄여보았는데 한번 적용해보도록 하겠습니다! |
||
cy.get('.gnb__button').click(); | ||
cy.contains('새로운 음식점'); | ||
}); | ||
|
||
it('음식점 추가 창에서 취소하기 버튼을 클릭하면 이전 화면으로 돌아간다.', () => { | ||
cy.visit(TEST_URL); | ||
cy.get('.gnb__button').click(); | ||
cy.contains('새로운 음식점'); | ||
cy.get('#modal-cancel').click(); | ||
cy.get('.modal').should('not.exist'); | ||
}); | ||
|
||
it('카테고리, 이름, 거리, 설명, 링크 `입력창`을 작성하고 `추가하기 버튼`을 `클릭`하면 음식점이 목록에 추가된다. (음식점 목록 추가)', () => { | ||
cy.visit(TEST_URL); | ||
cy.get('.gnb__button').click(); | ||
cy.contains('새로운 음식점'); | ||
cy.get('#category').select(RESTAURANT_INPUT_CASE.category); | ||
cy.get('#name').type(RESTAURANT_INPUT_CASE.name); | ||
cy.get('#distance').select(RESTAURANT_INPUT_CASE.distance); | ||
cy.get('#description').type(RESTAURANT_INPUT_CASE.description); | ||
cy.get('#link').type(RESTAURANT_INPUT_CASE.link); | ||
cy.get('.button-container').contains('추가하기').click(); | ||
cy.get('.app').contains('5분 내'); | ||
}); | ||
}); | ||
|
||
describe('음식점 목록, 드롭다운 메뉴/탭바', () => { | ||
it('드롭다운 메뉴를 통해 음식점 목록을 음식 종류 별로 정렬할 수 있다.', () => { | ||
cy.visit(TEST_URL, { | ||
onBeforeLoad(win) { | ||
win.localStorage.setItem('restaurants', JSON.stringify(CATEGORY_TEST_CASE)); | ||
}, | ||
}); | ||
cy.get('#category-filter').select('한식'); | ||
cy.get('.app').should('contain.text', '가_한식'); | ||
cy.get('.app').should('contain.text', '가_한식'); | ||
cy.get('.app').contains('다_중식').should('not.exist'); | ||
cy.get('.app').contains('라_일식').should('not.exist'); | ||
cy.get('.app').contains('하_오분거리 양식').should('not.exist'); | ||
cy.get('.app').contains('하_오분거리 아시안').should('not.exist'); | ||
}); | ||
|
||
it('드롭다운 메뉴를 통해 음식점 목록을 이름/거리 순으로 정렬할 수 있다.', () => { | ||
cy.visit(TEST_URL, { | ||
onBeforeLoad(win) { | ||
win.localStorage.setItem('restaurants', JSON.stringify(SORTING_TEST_CASE)); | ||
}, | ||
}); | ||
cy.get('#sorting-filter').select('distance'); | ||
cy.get('.restaurant-list li.restaurant') | ||
.first() | ||
.should('contain', '첫번째 거리') | ||
.next() | ||
.should('contain', '두번째 거리') | ||
.next() | ||
.should('contain', '세번째 거리') | ||
.next() | ||
.should('contain', '네번째 거리') | ||
.next() | ||
.should('contain', '다섯번째 거리'); | ||
|
||
cy.get('#sorting-filter').select('name'); | ||
cy.get('.restaurant-list li.restaurant') | ||
.first() | ||
.should('contain', '네번째 거리') | ||
.next() | ||
.should('contain', '다섯번째 거리') | ||
.next() | ||
.should('contain', '두번째 거리') | ||
.next() | ||
.should('contain', '세번째 거리') | ||
.next() | ||
.should('contain', '첫번째 거리'); | ||
}); | ||
|
||
it('탭바를 통해 음식점 목록을 모든 음식점/자주 가는 음식점 으로 분류하여 볼 수 있다.', () => { | ||
cy.visit(TEST_URL, { | ||
onBeforeLoad(win) { | ||
win.localStorage.setItem('restaurants', JSON.stringify(FAVORITES_TEST_CASE)); | ||
}, | ||
}); | ||
cy.get('.restaurant-list li.restaurant .favorite__button').first().click(); | ||
cy.get('.tab-bar-select[data-type="favorite"]').click(); | ||
cy.get('.app').contains('매우_좋아요'); | ||
cy.get('.app').contains('안좋아요').should('not.exist'); | ||
}); | ||
|
||
it('음식점 목록에서 `별표 버튼`을 `클릭`해 자주 가는 음식점으로 `등록/해제` 할 수 있다.', () => { | ||
cy.visit(TEST_URL, { | ||
onBeforeLoad(win) { | ||
win.localStorage.setItem('restaurants', JSON.stringify(FAVORITES_TEST_CASE)); | ||
}, | ||
}); | ||
cy.get('.restaurant-list li.restaurant .favorite__button').first().click(); | ||
cy.get('.favorite__button>img') | ||
.first() | ||
.should('have.attr', 'src', `./favorite-icon-filled.png`); | ||
}); | ||
}); | ||
|
||
describe('음식점 상세 정보 창', () => { | ||
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('음식점 목록을 클릭해 음식점 상세 정보창을 열 수 있다.', () => { | ||
cy.visit(TEST_URL, { | ||
onBeforeLoad(win) { | ||
win.localStorage.setItem('restaurants', JSON.stringify(FAVORITES_TEST_CASE)); | ||
}, | ||
}); | ||
cy.get('.restaurant-list li.restaurant').first().click(); | ||
cy.get('.modal').contains(FAVORITES_TEST_CASE[0].name); | ||
cy.get('.modal').contains(FAVORITES_TEST_CASE[0].description); | ||
cy.get('.modal').contains(FAVORITES_TEST_CASE[0].link); | ||
}); | ||
|
||
it('음식점 상세 정보창에서 `별표 버튼`을 `클릭`해 자주 가는 음식점으로 `등록/해제` 할 수 있다.', () => { | ||
cy.visit(TEST_URL, { | ||
onBeforeLoad(win) { | ||
win.localStorage.setItem('restaurants', JSON.stringify(FAVORITES_TEST_CASE)); | ||
}, | ||
}); | ||
|
||
cy.get('.restaurant-list li.restaurant').first().click(); | ||
cy.get('.modal .favorite__button').click(); | ||
cy.get('.modal #drawer-close__button').click(); | ||
|
||
cy.get('.tab-bar-select[data-type="favorite"]').click(); | ||
cy.get('.app').contains('매우_좋아요'); | ||
}); | ||
|
||
it('음식점 상세 정보창에서 `닫기 버튼`을 `클릭`해 음식점 상세 정보 창을 닫을 수 있다.', () => { | ||
cy.visit(TEST_URL, { | ||
onBeforeLoad(win) { | ||
win.localStorage.setItem('restaurants', JSON.stringify(FAVORITES_TEST_CASE)); | ||
}, | ||
}); | ||
|
||
cy.get('.restaurant-list li.restaurant').first().click(); | ||
cy.get('.modal #drawer-close__button').click(); | ||
cy.get('.modal').should('not.exist'); | ||
}); | ||
|
||
it('음식점 상세 정보창에서 `삭제 버튼`을 `클릭`해 음식점을 목록에서 삭제할 수 있다.', () => { | ||
cy.visit(TEST_URL); | ||
// 음식점 추가 | ||
cy.get('.gnb__button').click(); | ||
cy.contains('새로운 음식점'); | ||
cy.get('#category').select(RESTAURANT_INPUT_CASE.category); | ||
cy.get('#name').type(RESTAURANT_INPUT_CASE.name); | ||
cy.get('#distance').select(RESTAURANT_INPUT_CASE.distance); | ||
cy.get('#description').type(RESTAURANT_INPUT_CASE.description); | ||
cy.get('#link').type(RESTAURANT_INPUT_CASE.link); | ||
cy.get('.button-container').contains('추가하기').click(); | ||
|
||
// 삭제 버튼 | ||
cy.get('.restaurant-list li.restaurant').first().click(); | ||
cy.get('#restaurant-delete__button').click(); | ||
cy.get('.app').contains(RESTAURANT_INPUT_CASE.name).should('not.exist'); | ||
}); | ||
}); |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
{ | ||
"name": "Using fixtures to represent data", | ||
"email": "hello@cypress.io", | ||
"body": "Fixtures are a great way to mock data for responses to routes" | ||
} |
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.
cypress
로 e2e 테스트를 작성하셨군요 ! 👍 👍 👍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.
다시보니 파일 이름이
spec.cy.js
네요 더 좋은 이름은 없을까요?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.
app이니 app.cy.js 가 좋아보입니다~! cypress에서 기본값으로 주어서 관례적으로 사용하는 줄 알았는데 그런건 아니였군요!!