-
Notifications
You must be signed in to change notification settings - Fork 172
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
[1단계 - 자동차 경주 구현] 엽토(김건엽) 미션 제출합니다. #167
Changes from all commits
63fe28e
c376996
575f4cb
f1ed4ce
77c07a8
1070382
bab84d4
de22e5a
815eda5
2539980
6c957ef
4eb367b
a400357
2c35975
a3857da
24c0bfc
a91a9fe
5fb9de4
7a3c937
c016507
648f1a8
49d8c49
6b8cf2e
4eb34ff
403aebd
99d068e
3adbecd
93f8ecf
6f4e2ff
09b5089
8a33842
dc979c6
5f1e671
3b87d0b
d126011
9924ec6
5610618
2f08f21
03b85ce
cf10bd2
c07fbde
c8af6cc
e2fc29e
c9d815a
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,22 @@ | ||
module.exports = { | ||
env: { | ||
browser: true, | ||
es2021: true, | ||
node: true, | ||
}, | ||
extends: ['eslint:recommended', 'airbnb-base', 'prettier'], | ||
plugins: ['prettier'], | ||
rules: { | ||
'import/prefer-default-export': 'off', | ||
'import/extensions': ['off'], | ||
'class-methods-use-this': 'off', | ||
'no-alert': 'off', | ||
'no-undef': 'off', | ||
'no-new': 'off', | ||
'lines-between-class-members': 'off', | ||
}, | ||
parserOptions: { | ||
ecmaVersion: 13, | ||
sourceType: 'module', | ||
}, | ||
}; | ||
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,3 @@ | ||
node_modules/ | ||
dist/ | ||
.vscode |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
/** | ||
* Prettier 옵션 | ||
* - https://prettier.io/docs/en/options.html | ||
*/ | ||
module.exports = { | ||
printWidth: 110, // 한 줄 최대 문자 수 | ||
tabWidth: 2, // 들여쓰기 시, 탭 너비 | ||
useTabs: false, // 스페이스 대신 탭 사용 | ||
semi: true, // 문장 끝 세미콜론 사용 | ||
singleQuote: true, // 작은 따옴표 사용 | ||
trailingComma: 'all', // 꼬리 콤마 사용 | ||
bracketSpacing: true, // 중괄호 내에 공백 사용 | ||
arrowParens: 'avoid', // 화살표 함수 단일 인자 시, 괄호 생략 | ||
proseWrap: 'never', // 마크다운 포매팅 제외 | ||
endOfLine: 'auto', // 개행문자 유지 (혼합일 경우, 첫 줄 개행문자로 통일) | ||
}; |
This file was deleted.
This file was deleted.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
const Car = require('../src/Models/Car'); | ||
|
||
test('move 인자로 4이상의 수가 들어온다면 position을 1만큼 이동한다.', () => { | ||
// given | ||
const car = new Car('garam'); | ||
const numbers = [1, 3, 4, 5, 6, 2, 0]; | ||
const resultPosition = 3; | ||
|
||
// when | ||
numbers.forEach(number => { | ||
car.move(number); | ||
}); | ||
|
||
// then | ||
expect(car.getPosition()).toEqual(resultPosition); | ||
}); |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
const Car = require('../src/Models/Car'); | ||
const Race = require('../src/Models/Race'); | ||
const RandomNumGenerator = require('../src/Utils/RandomNumGenerator'); | ||
|
||
const mockRandoms = numbers => { | ||
RandomNumGenerator.generateNumber = jest.fn(); | ||
numbers.reduce( | ||
(acc, number) => acc.mockReturnValueOnce(number), | ||
RandomNumGenerator.generateNumber, | ||
); | ||
}; | ||
|
||
test('Race Class 테스트', () => { | ||
// given | ||
const cars = []; | ||
['garam', 'yeop'].forEach(name => { | ||
cars.push(new Car(name)); | ||
}); | ||
const race = new Race(cars); | ||
const tryCount = 3; | ||
mockRandoms([1, 2, 3, 4, 5, 6]); | ||
const result = new Map([ | ||
['garam', 1], | ||
['yeop', 2], | ||
]); | ||
|
||
// when | ||
for (let i = 0; i < tryCount; i += 1) { | ||
race.go(); | ||
} | ||
|
||
// then | ||
expect(race.getResult()).toEqual(result); | ||
}); |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
const { RACE_ERROR_MESSAGE } = require('../src/Constant/ErrorMessage'); | ||
const Validator = require('../src/Utils/Validator'); | ||
|
||
describe('Validator 테스트', () => { | ||
test.each([[['garam'], [''], ['garam', 'garam']]])( | ||
'자동차 이름이 한개 이하거나 중복될 경우 예외처리한다.', | ||
input => { | ||
expect(() => { | ||
Validator.validateNamesOfCars(input); | ||
}).toThrow(RACE_ERROR_MESSAGE.numberOfNames); | ||
}, | ||
); | ||
|
||
test.each([['yeopto'], ['garame']])( | ||
'이름이 5자를 초과하는 경우 예외처리한다.', | ||
input => { | ||
expect(() => { | ||
Validator.validateCarName(input); | ||
}).toThrow(RACE_ERROR_MESSAGE.lengthOfName); | ||
}, | ||
); | ||
|
||
test.each([[' '], ['!'], [''], ['123']])( | ||
'자동차 이름이 문자이거나 숫자만 들어간 경우 경우 예외처리한다.', | ||
input => { | ||
expect(() => { | ||
Validator.validateCarName(input); | ||
}).toThrow(RACE_ERROR_MESSAGE.invalidInput); | ||
}, | ||
); | ||
|
||
test.each([[0], [-1]])('시도 횟수가 1이상이 아니면 예외처리한다', input => { | ||
expect(() => { | ||
Validator.validateTryCount(input); | ||
}).toThrow(RACE_ERROR_MESSAGE.rangeOfTryCount); | ||
}); | ||
|
||
test.each([['aa'], [' '], ['한']])( | ||
'숫자가 아니라면 예외처리를 한다', | ||
input => { | ||
expect(() => { | ||
Validator.validateTryCount(input); | ||
}).toThrow(RACE_ERROR_MESSAGE.rangeOfTryCount); | ||
}, | ||
); | ||
}); |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
## 기능 구현 목록 | ||
|
||
- [x] 경주할 자동차 이름을 입력받는다.(쉼표를 기준으로) | ||
- [x] 시도할 횟수를 입력받는다. (수 제한 없음) | ||
- 각 자동차 마다 0에서 9까지의 무작위 값을 구한다. | ||
- [x] 0에서 9까지의 무작위 값을 구한다. | ||
- [x] 4 이상인 자동차인 경우는 전진시킨다. | ||
- [x] 입력받은 수만큼 시도 후 자동차 경주 결과를 출력한다. | ||
- [x] 최종 우승자를 출력하고 종료한다. | ||
|
||
## 예외 처리 | ||
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. 이 코멘트에 대해 이해가 잘 가지 않아서 질문드립니다! 예외상황이 발생했을 때의 처리하는 것을 기능구현목록에 추가하라는 말씀이신가요?! |
||
|
||
- [x] 시도횟수가 1이상의 숫자가 아닐 경우 예외처리한다. | ||
- [x] 이름이 다섯자 이하가 아닐 경우 예외처리한다. | ||
- [x] 이름에 숫자만 있거나 이름이 특수문자라면 예외처리한다. | ||
- [x] 자동차 이름이 한개 이하일 경우엔 예외처리한다. | ||
- [x] 자동차 이름이 중복된 경우엔 예외처리한다. |
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.
EOL을 수동으로 처리하는 것 외에 자동화할 수 있는 방법은 뭐가 있을지 고민해보면 좋을 것 같아요~
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.
prettier 설정으로 endOfLine을 'auto'로 해주었습니다. 이것도 수동으로 보아야할까요?