Section4 unit7 TDD - Test Builder

leekoby·2023년 3월 29일
0

CodeStates

목록 보기
3/6
post-thumbnail

📌들어가기에 앞서

해당 포스트는 CodeStates 과정중의 내용을 복습하며 정리한 것입니다.

이번 과제에서는 TDD에 대해 기초적인 내용을 작성해보는 시간이였다.

과제를 통해 테스트 없이 바닥부터 함수를 작성해서 console.log를 통해 테스트해보고,

이후 라이브러리를 통해 테스트하는 코드를 작성했다.




detectNetwork.js

detectNetwork 함수는 어떠한 카드 번호를 입력받았을 때 그 카드 번호에 해당하는 카드 회사의 이름을 return 하는 함수다.

주어진 조건이 다음과 같기 때문에 조건문을 사용해서 작성했다.

  • 'Diner's Club' 카드 번호는 항상 38이나 39로 시작을하고, 14 자리 숫자
  • 'American Express' 카드 번호는 항상 34 나 37로 시작하고, 15 자리 숫자
function detectNetwork(cardNumber) {
  let test = cardNumber.slice(0,2)

  if((test === '38'||'39')&&(cardNumber.length===14)){
    return `Diner's Club`;
  } if((test === '34'||'37')&&(cardNumber.length===15)){
    return 'American Express';
  }
}

그 다음으로

  • 'Visa' 카드 번호는 항상 4로 시작을하고, 14이나 16이나 19자리 숫자
  • 'MasterCard' 카드 번호는 항상 51~55로 시작하고, 16자리 숫자
if ((test[0] === '4') && (cardNumber.length === 13 || cardNumber.length === 16 || cardNumber.length === 19)) {
    return 'Visa';
} 
if ((test === '51' || test === '52' || test === '53' || test === '54' || test === '55') && (cardNumber.length === 16)) {
    return 'MasterCard';
}

Discover

  • 'Discover' 카드 번호는 항상 6011이나 65나 644~649로 시작을하고, 16이나 19자리 숫자
if ((testDiscover === '6011' || test === '65' || Discovers >= 644 || Discovers <= 649) && (cardNumber.length === 16 || cardNumber.length === 19)) {
    return "Discover"
  }



detectNetwork.test.js

과제에서는 mocha라는 테스트 프레임워크와 chai라는 라이브러리를 사용했다.

describe("Introduction to Mocha Tests - READ ME FIRST", function () {
  // Mocha 테스트는 그저 다음 기능을 하는 도구!
  // - 함수를 실행할 때 오류가 발생하면, 실패
  // - 오류가 발생하지 않으면, 실패하지 않음.

  // 우리는 테스트에서 예상 동작과 실제 동작을 비교하기를 원한다.
  // 예상 동작이 실제 동작과 다르다면, 테스트는 실패해야 한다.
  it("예상 동작이 실제 동작과 일치하지 않을 때 오류가 발생합니다.", function () {
    let even = function (num) {
      return num % 2 === 0;   // <- 잘 못된 계산식 수정함.
    };

    if (even(10) !== true) {
      throw new Error("10은 짝수여야 합니다!");
    }
  });
});

/* 
detectNetwork.js파일과 현재 파일을 수정해 모든 테스트가 통과하도록 만들어보세요.
*/

describe("Diner's Club", function () {
  it("has a prefix of 38 and a length of 14", function () {
    if (detectNetwork("38345678901234") !== "Diner's Club") {
      throw new Error("Test failed");
    }
  });

  it("has a prefix of 39 and a length of 14", function () {
    if (detectNetwork("3934567890123") !== "Diner's Club") {
    }
  });
});

describe("American Express", function () {
  let assert = function (isTrue) {
    if (!isTrue) {
      throw new Error("Test failed");
    }
  };

  it("has a prefix of 34 and a length of 15", function () {
    assert(detectNetwork("343456789012345") === "American Express");
  });

  it("has a prefix of 37 and a length of 15", function () {
    assert(detectNetwork("373456789012345") === "American Express");
  });
});

describe("Visa", function () {
  let assert = chai.assert;

  it("has a prefix of 4 and a length of 13", function () {
    assert(detectNetwork("4123456789012") === "Visa");
  });

  it("has a prefix of 4 and a length of 16", function () {
    assert(detectNetwork("4123456789012345") === "Visa");
  });

  it("has a prefix of 4 and a length of 19", function () {
    assert(detectNetwork("4123456789012345678") === "Visa");
  });
});

describe("MasterCard", function () {
  let expect = chai.expect;

  it("has a prefix of 51 and a length of 16", function () {
    should.equal(detectNetwork("5112345678901234"), "MasterCard");
  });

  it("has a prefix of 52 and a length of 16", function () {
    should.equal(detectNetwork("5212345678901234"), "MasterCard");
  });

  it("has a prefix of 53 and a length of 16", function () {
    should.equal(detectNetwork("5312345678901234"), "MasterCard");
  });

  // 스타일의 일관성을 유지하기 위해 should.equal로 통잃
  let should = chai.should();

  it("has a prefix of 54 and a length of 16", function () {
    should.equal(detectNetwork("5412345678901234"), "MasterCard");
  });

  it("has a prefix of 55 and a length of 16", function () {
    should.equal(detectNetwork("5512345678901234"), "MasterCard");
  });
});

describe("Discover", function () {
  let should = chai.should();

  it("has a prefix of 6011 and a length of 16", function () {
    should.equal(detectNetwork('6011123456789012'), "Discover");
  });
  it('has a prefix of 6011 and a length of 19', function () {
    should.equal(detectNetwork('6011123456789012345'), "Discover");
  });
  it('has a prefix of 65 and a length of 16', function () {
    should.equal(detectNetwork('6512345678901234'), 'Discover');
  });
  it('has a prefix of 65 and a length of 19', function () {
    should.equal(detectNetwork('6512345678901234567'), 'Discover');
  });
  for (let i = 644; i <= 649; i++) {
    it('has a prefix of ' + i + ' and a length of 16', function () {
      should.equal(detectNetwork(i.toString() + '1234567890123'), 'Discover');
    });
    it('has a prefix of ' + i + ' and a length of 19', function () {
      should.equal(detectNetwork(i.toString() + '1234567890123456'), 'Discover');
    });
  }
});



📚 레퍼런스

Chai Assertion Library

0개의 댓글