Wecode - Project 3 (부트캠프)/세션

이후 해보면 좋을 [계산기 프로그램 리팩토링] 과제 **

JBS 12 2023. 10. 27. 15:20

이후 개발을 하면서, 

이전에 학습 자료에 있던 과제를 해보고 나서 하면

도움이 된 적이 있어서, 

이렇게 적어둔다. 


과제 안내

https://www.notion.so/wecode/Assignment-1-e94825f059d04f2fbea2917ecb407ca2

  • calculate.js 코드
function add(a, b) {
  if (b < 0) {
    throw new Error("b가 0보다 작습니다.");
  }
  return a + b;
}

function subtract(a, b) {
  return a - b;
}

function multiple(a, b) {
  return a * b;
}

function divide(a, b) {
  return a / b;
}

module.exports = { add, subtract, multiple, divide }

[복사를 위한 코드 재작성] 
function add(a, b) {
  if (b < 0) {
    throw new Error("b가 0보다 작습니다.");
  }
  return a + b;
}

function subtract(a, b) {
  return a - b;
}

function multiple(a, b) {
  return a * b;
}

function divide(a, b) {
  return a / b;
}

module.exports = { add, subtract, multiple, divide }

 

  • calculate.test.js 코드
const { add, subtract, multiple, divide } = require("./calculate");

describe("calculate unit test", () => {
  describe("add", () => {
    test("add(1, 2)는 3이 되어야합니다.", () => {
      expect(add(1, 2)).toBe(3);
    });

    test("add(1, -1)은 에러를 던집니다.", () => {
      try {
        add(1, -1);
      } catch (err) {
        expect(err).toBeInstanceOf(Error);
        expect(err).toHaveProperty("message", "b가 0보다 작습니다.");
      }
    });
  });

  describe("subtract", () => {
    test("subtract(2, 1)는 1이 되어야합니다.", () => {
      expect(subtract(2, 1)).toBe(1);
    });
  });

  describe("multiple", () => {
    test("multiple(3, 4)는 12이 되어야합니다.", () => {
      expect(multiple(3, 4)).toBe(12);
    });
  });

  describe("divide", () => {
    test("divide(10, 2)는 5가 되어야합니다.", () => {
      expect(divide(10, 2)).toBe(5);
    });
  });
});

describe("calculate integration test", () => {
  test("add(1, 3)과 subtract(4, 2)를 multiple한 결과는 8입니다.", () => {
    const addResult = add(1, 3);
    expect(addResult).toBe(4);
    const subtractResult = subtract(4, 2);
    expect(subtractResult).toBe(2);
    expect(multiple(addResult, subtractResult)).toBe(8);
  });
});

[복사를 위한 코드 재작성] 


const { add, subtract, multiple, divide } = require("./calculate");

describe("calculate unit test", () => {
  describe("add", () => {
    test("add(1, 2)는 3이 되어야합니다.", () => {
      expect(add(1, 2)).toBe(3);
    });

    test("add(1, -1)은 에러를 던집니다.", () => {
      try {
        add(1, -1);
      } catch (err) {
        expect(err).toBeInstanceOf(Error);
        expect(err).toHaveProperty("message", "b가 0보다 작습니다.");
      }
    });
  });

  describe("subtract", () => {
    test("subtract(2, 1)는 1이 되어야합니다.", () => {
      expect(subtract(2, 1)).toBe(1);
    });
  });

  describe("multiple", () => {
    test("multiple(3, 4)는 12이 되어야합니다.", () => {
      expect(multiple(3, 4)).toBe(12);
    });
  });

  describe("divide", () => {
    test("divide(10, 2)는 5가 되어야합니다.", () => {
      expect(divide(10, 2)).toBe(5);
    });
  });
});

describe("calculate integration test", () => {
  test("add(1, 3)과 subtract(4, 2)를 multiple한 결과는 8입니다.", () => {
    const addResult = add(1, 3);
    expect(addResult).toBe(4);
    const subtractResult = subtract(4, 2);
    expect(subtractResult).toBe(2);
    expect(multiple(addResult, subtractResult)).toBe(8);
  });
});

  • 테스트 실습에서 진행한 위의 코드를 이용하여 아래의 요구사항을 진행해주세요.
    1. 전체 4개의 함수에서 a, b 두개의 매개변수가 숫자일 때만 결과를 return 하게 해주세요. (그 외에는 return NaN; 으로 처리해주세요.)
    2. 나누기(divide) 함수에서 b 매개변수가 0일 때, return Infinity; 로 처리해주세요.
    3. npx jest --coverage 명령어로 테스트 커버리지를 확인하신 다음, 테스트를 추가하여 전체 커버리지를 100%로 맞춰주세요.
  • 위의 요구사항을 진행하신 다음 제출해야 하는 파일 및 이미지는 다음과 같습니다.
    1. 프로그램 파일 (calculator.js)
    2. 테스트 코드 파일 (calculator.test.js)
    3. 커버리지를 확인할 수 있는 이미지
  • 요구사항을 제외하고도 추가로 넣고 싶은 테스트가 있다면 넣어도 무방합니다.
  •