ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 3. NestJs 설문조사 미니 프로젝트 - [ 테스트 ] - 실패하는 테스트 케이스
    공부하기/node.js 2023. 2. 14. 18:37

    지난 포스팅에서 작성한 in bound port, out bound port, service를 사용하여 실패하는 테스트 케이스를 작성하도록 하겠습니다.

    실패하는 테스트 케이스를 작성한 뒤 각각의 테스트 케이스가 통과할 수 있도록 구현할 예정입니다.

    지난 포스팅에서 모든 서비스의 execute의 리턴값을 null로 설정했기 때문에 이번 포스팅에서 작성된 모든 테스트 케이스는 실패합니다.

     


    설문지 목록(findAll) 테스트 케이스

    import {
      SurveyFindAllInPortInputDto,
      SurveyFindAllInPortOutputDto,
    } from '../../in-port/survey-findall.ip';
    import { SurveyFindAllService } from '../survey-findall.service';
    
    describe('설문지 리스트를 반환한다.', () => {
      const surveyList: SurveyFindAllInPortOutputDto = [
        {
          id: 1,
          name: '당신이 선호하는 백엔드 언어는?',
          description:
            '백엔드 개발자가 선호하는 언어를 조사하기 위한 설문지입니다.',
        },
        {
          id: 2,
          name: '당신이 선호하는 프론트엔드 언어는?',
          description:
            '프론트엔드 개발자가 선호하는 언어를 조사하기 위한 설문지입니다.',
        },
        {
          id: 3,
          name: '당신이 nodejs 개발자를 선택한 이유는?',
          description:
            '개발자가 자신이 주력으로 사용한 언어를 선택한 이유를 묻는 설문지입니다.',
        },
      ];
    
      const params: SurveyFindAllInPortInputDto = {
        page: 1,
        size: 3,
        sort: 'ASC',
      };
      const findAllSurveyService = new SurveyFindAllService();
    
      test('설문지 목록', async () => {
        const findallResult = await findAllSurveyService.execute(params);
    
        expect(findallResult).toStrictEqual(surveyList);
      });
    });
    • surveyList: findAll 메서드의 결과로 예상되는 설문지 리스트
    • params: 설문지 리스트 요청 input

    설문지 상세(findOne) 테스트 케이스

    import {
      SurveyFindOneInPortInputDto,
      SurveyFindOneInPortOutputDto,
    } from '../../in-port/survey-findone.ip';
    import { SurveyFindOneService } from '../survey-findone.service';
    
    describe('설문지 상세정보를 반환한다.', () => {
      const survey: SurveyFindOneInPortOutputDto = {
        id: 1,
        name: 'test-survey',
        description: 'test-desc',
      };
      const params: SurveyFindOneInPortInputDto = 1;
      const findAllSurveyService = new SurveyFindOneService();
    
      test('설문지 상세', async () => {
        const findoneResult = await findAllSurveyService.execute(params);
    
        expect(findoneResult).toStrictEqual(survey);
      });
    });
    • survey: 예상되는 설문지 상세 오브젝트
    • params: 찾고자 하는 설문지 id

    설문지 생성(create) 테스트 케이스

    import {
      SurveyCreateInPortInputDto,
      SurveyCreateInPortOutputDto,
    } from '../../in-port/survey-create.ip';
    import { SurveyCreateService } from '../survey-create.service';
    
    describe('설문지를 생성한다.', () => {
      const survey: SurveyCreateInPortOutputDto = {
        id: 1,
        name: 'test-survey',
        description: 'test-desc',
      };
      const params: SurveyCreateInPortInputDto = {
        name: 'test-survey',
        description: 'test-desc',
      };
      const CreateSurveyService = new SurveyCreateService();
    
      test('설문지 생성.', async () => {
        const createResult = await CreateSurveyService.execute(params);
    
        expect(createResult).toStrictEqual(survey);
      });
    });
    • survey: 생성된 설문지
    • params: 설문지 생성 input

    설문지 업데이트(update) 테스트 케이스

    import { SurveyUpdateService } from '../survey-update.service';
    
    describe('설문지 업데이트', () => {
    
      const UpdateSurveyService = new SurveyUpdateService();
    
      test('설문지 이름', async () => {
        const nameUpdateResult = await UpdateSurveyService.execute({
          name: 'update-test-survey',
        });
    
        expect(nameUpdateResult).toStrictEqual({
          id: 1,
          name: 'update-test-survey',
          description: 'test-desc',
        });
      });
    
      test('설문지 설명', async () => {
        const descUpdateResult = await UpdateSurveyService.execute({
          description: 'update-test-desc',
        });
    
        expect(descUpdateResult).toStrictEqual({
          id: 1,
          name: 'update-test-survey',
          description: 'update-test-desc',
        });
      });
    });
    • nameUpdateResult: 설문지 이름 업데이트 예상 결과
    • descUpdateResult: 설문지 설명 업데이트 예상 결과

    설문지 삭제(delete) 테스트 케이스

    import { SurveyDeleteInPortInputDto } from '../../in-port/survey-delete.ip';
    import { SurveyDeleteService } from '../survey-delete.service';
    
    type SurveyList = Array<{
      id: number;
      name: string;
      description: string;
    }>;
    
    describe('설문지를 생성한다.', () => {
      
      const existIdDeleteParam: SurveyDeleteInPortInputDto = 1;
      const notExistIdDeleteParam: SurveyDeleteInPortInputDto = 4;
      const DeleteSurveyService = new SurveyDeleteService();
    
      test('존재하는 설문지 삭제', async () => {
        const res = await DeleteSurveyService.execute(existIdDeleteParam);
    
        expect(res).toBe(1);
      });
    
      test('존재하지 않는 설문지 삭제', async () => {
        const res = await DeleteSurveyService.execute(notExistIdDeleteParam);
    
        expect(res).toBe(0);
      });
    });
    • surveyList: 데이터베이스에 이미 저장되어 있다고 가정되는 설문지 리스트
    • existIdDeleteParam: 데이터베이스에 이미 존재하고 있다고 예상되는 설문지 id
    • notExistIdDeleteParam: 데이터베이스에 존재하지 않는다고 예상되는 설문지 id

    설문지 검색(search) 테스트 케이스

    import { SurveySearchInPortInputDto } from '../../in-port/survey-search.ip';
    import { SurveySearchService } from '../survey-Search.service';
    
    describe('설문지 리스트를 반환한다.', () => {
    
      const params: SurveySearchInPortInputDto = {
        page: 1,
        size: 3,
        sort: 'ASC',
        keyword: '백엔드',
      };
      const SearchSurveyService = new SurveySearchService();
      
      test('설문지 검색 목록', async () => {
        const SearchResult = await SearchSurveyService.execute(params);
    
        expect(SearchResult).toStrictEqual([
          {
            id: 1,
            name: '당신이 선호하는 백엔드 언어는?',
            description:
              '백엔드 개발자가 선호하는 언어를 조사하기 위한 설문지입니다.',
          },
        ]);
      });
    });
    • surveyList: 데이터베이스에 이미 저장되어 있다고 가정되는 설문지 리스트
    • params: 설문지 검색 input

    테스트 결과

     

Designed by Tistory.