Skip to content
Open
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
27 changes: 27 additions & 0 deletions .eslintrc.cjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
module.exports = {
env: {
browser: true,
commonjs: true,
es2021: true,
},
extends: ['airbnb-base', 'prettier'],
overrides: [
{
env: {
node: true,
jest: true,
},
files: ['.eslintrc.{js,cjs}'],
parserOptions: {
sourceType: 'script',
},
},
],
parserOptions: {
ecmaVersion: 'latest',
},
rules: {
'max-depth': ['error', 2],
'max-lines-per-function': ['error', { max: 15 }],
},
};
11 changes: 11 additions & 0 deletions .prettierrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"singleQuote": true,
"semi": true,
"useTabs": false,
"tabWidth": 2,
"trailingComma": "all",
"printWidth": 80,
"bracketSpacing": true,
"arrowParens": "always",
"endOfLine": "auto"
}
1 change: 1 addition & 0 deletions __tests__/LottoTest.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,4 @@ describe("로또 클래스 테스트", () => {

// 아래에 추가 테스트 작성 가능
});

45 changes: 45 additions & 0 deletions __tests__/MyTest.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import { Console, Random } from '@woowacourse/mission-utils';
import App from '../src/App.js';

const mockQuestions = (inputs) => {
// Console.readLineAsync mocking
Console.readLineAsync = jest.fn();

Console.readLineAsync.mockImplementation(() => {
const input = inputs.shift();
return Promise.resolve(input);
});
};

describe('입력 예외 처리 테스트', () => {
test.each([[['14002']], [['1200']]])(
'구입 금액이 1,000원 단위가 아닐 경우 예외가 발생한다.',
async (inputs) => {
mockQuestions(inputs);

const app = new App();

await expect(app.getInputPrice()).rejects.toThrow('[ERROR]');
},
);

test('당첨 번호 입력이 올바르지 않을 경우 예외가 발생한다.', () => {
async (inputs) => {
mockQuestions(inputs);

const app = new App();

await expect(app.getInputWinnigNuber()).rejects.toThrow('[ERROR]');
};
});
});

describe('출력 예외 처리 테스트', () => {
test('예제 입력값에 따라 생성된 로또의 수량이 옳지 않으면 예외가 발생한다.', () => {

});
});

describe('로또 당첨 관련 테스트', () => {
test('당첨 내역 및 수익률 테스트', () => {});
});
65 changes: 65 additions & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# 기능 목록

## 테스트

### 입력 예외 처리

- 구입 금핵 유효성 예외 처리 테스트
- 예제 입력값이 구입 금액 조건을 만족하는지 테스트
- 1000원 단위가 아닐 경우 예외 처리
- 당첨 번호 유효성 예외 처리 테스트
- 예제 입력값이 당첨 번호 조건을 만족하는지 테스트
- 중복된 번호가 포함되어 있는 경우 예외 처리
- 쉼표로 구분된 문자열을 split 하여 기댓값과 같은지 테스트

### 출력 예외 처리

- 금액에 따른 로또 수량 테스트
- 예제 입력값에 따라 생성된 로또의 수량이 기댓값을 만족하는지 테스트

### 당첨 테스트

- 예제 입력값 (금액, 금액만큼의 로또, 예제 로또 번호)에 따른 당첨 내역 및 수익률이 기댓값을 만족하는지 테스트

## 입력 기능

### 사용자에게 구입할 금액을 입력 받는 기능

- 구입 금액 유효성 검사
- 입력이 숫자인지
- 입력이 1,000으로 나누어 떨어지지 않는지

### 당첨 번호 입력 받는 기능

- 당첨번호가 쉼표로 구분된 문자열인지 예외 처리
- 당첨번호가 중복되지 않은 6개의 숫자인지 예외 처리

### 보너스 번호를 입력 받는 기능

- 보너스 번호가 1 ~ 45 사이의 숫자인지 유효성 검사
- 보너스 번호가 당첨 번호와 중복되지 않는지 검사

## 로또 생성 기능

### 로또를 수량만큼 생성하는 기능

- 사용자의 금액 입력에 따른 로또 매수만큼 로또를 생성하는 기능.

## 출력 기능

### 로또 수량을 출력하는 기능

- 사용자의 금액 입력만큼의 로또를 생성하여 출력

### 로또 결과를 출력하는 기능

- 당첨 내역과 수익률을 출력

## 로또 추첨 기능

### 로또 당첨을 확인하는 기능

- 생성된 사용자의 로또와 입력된 당첨 번호를 비교하여 당첨 여부 확인

### 수익률을 계산하는 기능
- 당첨 여부를 확인하여 총 상금을 구해 수익률을 계산.
Loading