React 단위 테스트

런던행·2020년 12월 8일
0

React

목록 보기
5/6

주니어 개발자가 벨리데이션를 담당하는 클래스를 만들었지만 테스트코드가 없어 테스트코드 관련하여 가이드 후 주니어 개발자가 단위 테스트코드를 작성하였다.

export default class StudentValidation {
  // 이름의 유효성을 검사하는 함수
  validateName = (name: string) => {
    const blankRegExp = /\s/g;
    const hyphenRegExp = /-/g;
    const periodRegExp = /\./g;
    const specialRegExp = /[~!@#$%^&*()_+|<>?:{}]/;
    const englishRegExp = /[a-zA-Z]/;
    const koreanRegExp = /[ㄱ-ㅎ|ㅏ-ㅣ가-힣]/;
    const blankLength = (name.match(blankRegExp) || []).length;
    const hyphenLength = (name.match(hyphenRegExp) || []).length;
    const periodLength = (name.match(periodRegExp) || []).length;

    // 이름의 길이가 50 이상인 경우 false 반환
    if (name.length > 50) {
      return false;
    }

    // 이름 앞뒤로 공백이 있는 경우 false 반환
    if (name.trim() !== name) {
      return false;
    }

    if (koreanRegExp.test(name)) {
      // 이름에 한글과 영어가 혼용된 경우 false 반환
      if (englishRegExp.test(name)) {
        return false;
      }

      // 이름이 한글인 경우 특수 문자가 포함되었다면 false 반환
      if (name.search(specialRegExp) !== -1) {
        return false;
      }

      // 이름이 한글인 경우 공백이 포함되었다면 false 반환
      if (name.search(blankRegExp) !== -1) {
        return false;
      }
    }

    // 이름이 영어인 경우 2개 이상의 공백, 하이픈, 마침표가 포함되었다면 false 반환
    if (englishRegExp.test(name) && blankLength + hyphenLength + periodLength > 2) {
      return false;
    }

    return true;
  }

  // 전화번호의 유효성을 검사하는 함수
  validateContact = (contact: string) => {
    const contactRegExp = /(01[016789])(\d{7}|\d{8})$/g;

    return contactRegExp.test(contact);
  }
}

테스트 코드

import StudentValidation from '../index';

describe('test for valid student parent contact', () => {
  it('test validateContact 01012345678', () => {
    // Given
    const parentContact = '01012345678';
    const student = new StudentValidation();

    // When
    const validation = student.validateContact(parentContact);

    // Then
    expect(validation).toEqual(true);
  });

  it('test validateContact 0101234567', () => {
    // Given
    const parentContact = '0101234567';
    const student = new StudentValidation();

    // When
    const validation = student.validateContact(parentContact);

    // Then
    expect(validation).toEqual(true);
  });

  it('test validateContact 12345678910', () => {
    // Given
    const parentContact = '12345678910';
    const student = new StudentValidation();

    // When
    const validation = student.validateContact(parentContact);

    // Then
    expect(validation).toEqual(false);
  });

  it('test validateContact 010111111222222', () => {
    // Given
    const parentContact = '010111111222222';
    const student = new StudentValidation();

    // When
    const validation = student.validateContact(parentContact);

    // Then
    expect(validation).toEqual(false);
  });
});

평가

처음치곤 깔금하다.

profile
unit test, tdd, bdd, laravel, django, android native, vuejs, react, embedded linux, typescript

0개의 댓글