카테고리 없음
마무리하기 자바스크립트
캉구리
2024. 4. 19. 18:54
.
자바스크립트에서 "그린" 단계로 전환하여 첫 번째 실패하는 테스트를 통과하도록 코드를 작성한 후, "리팩터" 단계를 통해 코드의 품질을 향상시키겠습니다.
그린 단계: 테스트 통과를 위한 최소한의 코드 작성
- 프로젝트 구조:
-
코드 복사project/ ├── authService.js └── authService.test.js
- authService.js: AuthService 클래스의 login 메서드를 수정합니다.
-
javascript코드 복사class AuthService { constructor() { // 임시로 하드코딩된 유효한 사용자명과 비밀번호 설정 this.validUsername = 'validUser'; this.validPassword = 'validPassword'; } login(username, password) { // 입력된 사용자명과 비밀번호가 유효한지 확인 return username === this.validUsername && password === this.validPassword; } } module.exports = AuthService;
- authService.test.js: 테스트 파일은 변경하지 않습니다.
-
javascript코드 복사const AuthService = require('./authService'); test('should login with valid credentials', () => { // Arrange: 유효한 사용자명과 비밀번호를 가진 사용자 생성 const validUser = { username: 'validUser', password: 'validPassword' }; // Arrange: AuthService 인스턴스 생성 const authService = new AuthService(); // Act: 로그인 시도 const result = authService.login(validUser.username, validUser.password); // Assert: 로그인 성공 여부 확인 expect(result).toBe(true); // 이 테스트는 이제 통과해야 합니다. });
테스트 실행:
- 터미널에서 테스트를 실행합니다.
bash코드 복사npm test
예상 결과:
테스트를 실행하면 should login with valid credentials 테스트가 통과할 것입니다. 이는 AuthService 클래스의 login 메서드가 유효한 사용자명과 비밀번호를 검증하는 로직을 포함하고 있기 때문입니다.
리팩터 단계: 코드 품질 향상
리팩터 단계에서는 코드를 더 읽기 쉽게 만들고, 유지 보수성을 높이며, 중복을 제거하는 등의 작업을 합니다.
- 리팩터링 계획:
- 하드코딩된 사용자명과 비밀번호를 외부 설정이나 인자로 전달받을 수 있도록 수정합니다.
authService.js:
javascript
코드 복사
class AuthService { constructor(validUsername, validPassword) { this.validUsername = validUsername; this.validPassword = validPassword; } login(username, password) { return username === this.validUsername && password === this.validPassword; } } module.exports = AuthService;
authService.test.js:
javascript
코드 복사
const AuthService = require('./authService'); test('should login with valid credentials', () => { // Arrange: 유효한 사용자명과 비밀번호를 가진 사용자 생성 const validUsername = 'validUser'; const validPassword = 'validPassword'; // Arrange: AuthService 인스턴스 생성 const authService = new AuthService(validUsername, validPassword); // Act: 로그인 시도 const result = authService.login(validUsername, validPassword); // Assert: 로그인 성공 여부 확인 expect(result).toBe(true); // 이 테스트는 이제 통과해야 합니다. });
이제 AuthService 클래스는 유효한 사용자명과 비밀번호를 외부에서 인자로 받아 초기화하도록 리팩터링되었습니다. 이로써 코드의 유연성과 재사용성이 향상되었습니다.