Jasmine으로 단위 테스트를 시작하는 방법

previous article에서 순수한 함수를 테스트하는 단위의 의사 코드 예제를 보여 주었습니다. 그 기사에 대한 응답으로 훌륭한 질문을 받았습니다. 그러면 코드 테스트를 어떻게 시작해야 합니까? 테스트를 위해 동일하고 간단한 사례를 좀 더 실용적으로 살펴보겠습니다.

코드베이스 가져오기



예제 코드로 repository을 준비했습니다. 주요 내용은 pure-functions.js입니다.

export function greet(name, surname) {
  return `Hello ${name} ${surname}!`;
}

export function calculateDiscountedPrice(originalPrice, discount) {
  return originalPrice - originalPrice * discount;
}

export function power(base, exponent) {
  return base ** exponent;
}


보시다시피 코드는 간단합니다.

로컬에서 새 패키지를 생성하는 경우 Gotcha



전체 리포지토리 대신 코드 파일을 복사하려는 경우 문제가 하나 있습니다. 다음을 수행해야 합니다.
  • 다음을 사용하여 패키지를 생성합니다.

  • $ npm init
    


    따라서 노드 종속성은 현재 폴더에 설치됩니다.
  • package.json에 추가하여 코드를 모듈로 전환합니다.

  • {
      
      "type": "module",
      
    }
    


    my repo에서 수행 방법을 확인할 수 있습니다.

    재스민 설치



    테스트할 코드는 브라우저나 노드에서 동일한 방식으로 작동합니다. 간단히 하기 위해 Node.js에서 테스트해 보겠습니다. 먼저 Jasmine을 설치해야 합니다. 그렇게 하려면 official documentation을 따르십시오.

    $ npm install --save-dev jasmine #1
    
    $ npx jasmine init #2
    


    명령은 다음 기능을 수행합니다.
  • 개발 종속성으로 Jasmine 설치
  • spec/support/jasmine.json에서 기본 구성을 생성합니다.

  • {
      "spec_dir": "spec",
      "spec_files": [
        "**/*[sS]pec.?(m)js"
      ],
      "helpers": [
        "helpers/**/*.?(m)js"
      ],
      "env": {
        "stopSpecOnExpectationFailure": false,
        "random": true
      }
    }
    


    마지막으로 테스트 명령을 구성하도록 업데이트package.json해 보겠습니다.

    {
      
      "scripts": {
        "test": "jasmine"
      },
      
    }
    


    테스트 실행(아니오)



    이 시점에서 단일 테스트가 아니라 필요한 모든 구성을 완료해야 합니다. 예상대로 작동하는지 살펴보겠습니다.

    $ npm test
    
    > [email protected] test
    > jasmine
    
    Randomized with seed 10285
    Started
    
    
    No specs found
    Finished in 0.002 seconds
    Incomplete: No specs found
    Randomized with seed 10285 (jasmine --random=true --seed=10285)
    


    예제 테스트



    간단한 테스트를 추가해 보겠습니다. Jasmine 규칙과 일치하는 새 파일./spec/pure-functions.spec.js을 생성합니다.
  • ./spec 폴더 안에 있습니다. 생성된 구성의 다음 줄에 설정된 내용을 따릅니다. "spec_dir": "spec",
  • spec.js로 끝납니다 — "spec_files": ["**/*[sS]pec.?(m)js"에 확립된 또 다른 이름 지정 패턴입니다.

  • 내부로 들어가는 코드./spec/pure-functions.spec.js:

    import { greet } from "../pure-functions.js";
    
    describe("greet", () => {
      it("should greet by name & surname", () => {
        expect(greet("Lorem", "Ipsum")).toEqual("Hello Lorem Ipsum!");
      });
    });
    


    암호:
  • import { greet } from "../pure-functions.js"; - 소스 코드에서 함수를 가져옵니다. 이 줄은 "type": "module",package.json 가 없으면 예상대로 작동하지 않습니다.
  • describe("", <callback>) — 더 나은 오류 메시지를 위해 관련 테스트를 래핑합니다.
  • it("", <callback>) - 개별 테스트,
  • expect(<value>).<matcher>(<arguments>); —Jasmine에서 기대치를 설정하는 방법입니다. matchers in the documentation 을(를) 찾을 수 있습니다.

  • 운영!



    이 테스트 실행:

    $ npm run test
    
    > [email protected] test
    > jasmine
    
    Randomized with seed 09863
    Started
    .
    
    
    1 spec, 0 failures
    Finished in 0.004 seconds
    Randomized with seed 09863 (jasmine --random=true --seed=09863)
    


    최종 코드



    내 최종 코드here를 찾을 수 있습니다.

    숙제



    다음은 몇 가지 숙제입니다. 코드를 가져오고 first article에서 테스트를 계속 다시 구현하십시오. 의견에 결과나 투쟁을 공유하는 것을 환영합니다.

    좋은 웹페이지 즐겨찾기