JavaScript_ Unit Test/ TDD

AdelaΒ·2020λ…„ 4μ›” 4일
0

JavaScript

λͺ©λ‘ 보기
1/17
post-thumbnail

πŸ› Debugging

"버그λ₯Ό μž‘λŠ”λ‹€"
μ˜ˆμƒμΉ˜ λͺ»ν•œ ν”„λ‘œκ·Έλž¨μ˜ 행동듀에 원인을 λΆ„μ„ν•˜κΈ° μœ„ν•œ 기술
console.logλ₯Ό μ΄μš©ν•œ 디버깅 방법에 μ΅μˆ™ν•΄μ•Ό ν•œλ‹€

Unit Test (= Testcase)

였λ₯˜κ°€ 생겼을 λ•Œ 경우의 수λ₯Ό μ •λ¦¬ν•˜κ³ 
경우의 μˆ˜μ— λŒ€ν•΄ ν•˜λ‚˜μ”© κΈ°λŒ€κ°’κ³Ό μ‹€μ œκ°’ λΉ„κ΅ν•˜λŠ” ν•¨μˆ˜

μ‚¬μ†Œν•œ ν•¨μˆ˜λ₯Ό μ œμ™Έν•œ λͺ¨λ“  ν•¨μˆ˜μ— μœ λ‹› ν…ŒμŠ€νŠΈλ₯Ό ν•΄μ•Ό ν•œλ‹€.

μ½”λ“œκ°€ λ³΅μž‘ν•΄μ§€λ©΄ 점점 ν—·κ°ˆλ¦¬κ²Œ λ˜λŠ” κ²½μš°κ°€ λ§Žλ‹€.
각각의 μ»΄ν¬λ„ŒνŠΈλ“€μ„ ν…ŒμŠ€νŠΈν•˜λ„λ‘ ν…ŒμŠ€νŠΈμΌ€μ΄μŠ€λ₯Ό λ§Œλ“€λ©΄ λ‚΄κ°€ 무엇을 λ§Œλ“€κ³  μžˆλŠ”μ§€λ₯Ό λ°”λ‘œ 이해할 수 μžˆλ‹€.
μ—¬κΈ°μ €κΈ° console.log λ₯Ό 찍어 ν™•μΈν•˜λŠ” 것보닀 μž‘μ€ ν…ŒμŠ€νŠΈλ“€μ„ 톡해 ν˜„μž¬μ˜ μ½”λ“œλ₯Ό ν™•μΈν•˜λŠ” 방법이 더 λ‚˜μ„ 수 μžˆλ‹€.

Unit Test의 μž₯점

μ—¬λŸ¬ μ»΄ν¬λ„ŒνŠΈλ₯Ό 각각 κ°œλ°œν•˜λŠ” 경우 testλ₯Ό ν†΅κ³Όν•œ μ½”λ“œλΌλ©΄ μ—°κ΄€ μ»΄ν¬λ„ŒνŠΈμ˜ μ œμž‘μ΄ μ™„λ£Œλ˜μ§€ μ•Šλ”λΌλ„ μ½”λ“œλ₯Ό 푸쉬할 수 μžˆλ‹€.

ν•˜λ‚˜μ˜ λ‹¨μœ„ ν…ŒμŠ€νŠΈλŠ” κ΅¬ν˜„ν•΄μ•Ό ν•  μ½”λ“œ κΈ°λŠ₯을 μͺΌκ°œμ–΄ κ΅¬ν˜„ ν•  μ½”λ“œμ˜ ν’ˆμ§ˆ ν–₯상 κΈ°λŒ€ν•  수 μžˆλ‹€.
μœ μ§€ λ³΄μˆ˜κ°€ μ‰¬μš΄ ν…ŒμŠ€νŠΈμΌ€μ΄μŠ€λ₯Ό μž‘μ„± (1 test : 1 function)

test-caseλ₯Ό 보고도 API의 μ‚¬μš©λ²•μ„ μ•Œ 수 μžˆλŠ” 예제 역할을 ν•œλ‹€.

ν…ŒμŠ€νŠΈ 주도 개발(TDD: Test-driven Development)

TDDλŠ” 개발 방법둠이닀.

μž₯점

  • ν…ŒμŠ€νŠΈλ₯Ό 짜기 μœ„ν•΄μ„œ μ½”λ“œλ₯Ό μ–΄λ–»κ²Œ ꡬ성할지 κ³ λ―Όν•˜κ²Œ 되고, κ·Έ κ³Όμ •μ—μ„œ 였λ₯˜κ°€ 적은 μ½”λ“œλ₯Ό 짜게 λœλ‹€.
  • ν…ŒμŠ€νŠΈκ°€ 쉽도둝 μ½”λ“œλ₯Ό λ””μžμΈν•˜κ²Œ λ˜λŠ” νš¨κ³Όλ„ μžˆλ‹€.
  • 각각의 μœ λ‹›(ν•¨μˆ˜) λͺ©μ μ„ λͺ…ν™•ν•˜κ²Œ ν•  수 μžˆλ‹€.

단점

  • 진행 속도
    • Test Framework : unit testλ₯Ό λ•λŠ” 툴(mocha/ chai/ ..)
    • console.logλ₯Ό μ΄μš©ν•œ unit test도 μ’‹λ‹€

ν…ŒμŠ€νŠΈκ°€ ν•„μš”ν•œ 이유?μš°λ¦¬κ°€ μž‘μ„±ν•œ μ½”λ“œμ— λ¬Έμ œκ°€ μžˆλŠ”μ§€ 확인할 수 μžˆλ‹€

Test Framework

mocha

describe, it

describe('#save', function() {
   it('should save without error', function(done) {
      var user = new User('Luna');
      user.save(done);
   });
});

chai

  • assert(expression, message) μ‚¬μš© μ˜ˆμ‹œ
    @param { Mixed } expression to test for truthiness
    @param { String } message to display on error
assert('foo' !== 'bar', 'foo is not bar');
assert(Array.isArray([]), 'empty arrays are arrays');
  • expect μ‚¬μš© μ˜ˆμ‹œ
expect(function () {}).to.not.throw();
expect({a: 1}).to.not.have.property('b');
expect({a: 1, b: 2}).to.have.all.keys('a', 'b');
profile
πŸ‘©πŸΌβ€πŸ’» SWE (FE)

0개의 λŒ“κΈ€