Koans는 불교에서 유래된 단어로, 결론을 내리기 전에 이게 왜 맞는지 깊게 고민한다는 의미를 가지고 있다고 한다. 답이 미리 제시되어 있기 때문에 고민 없이 풀면, 큰 어려움 없이 전부 다 풀 수 있지만 그게 왜 정답인지 깊게 고민해 보는 시간을 갖지 않는다면 충분히 성장하기 어려울 것이다. 즉, '왜?' 라는 물음에 대해 꼭 깊은 고찰을 하고 넘어가자는 의미이다.
코딩테스트 문제를 풀 때 내가 짠 코드를 콘솔에 수동으로 하나하나 찍지 않아도, A의 상황일 때 통과하는지 B의 상황일 때 통과하는지 등을 바로바로 알려주는 것이 바로 테스트 자동화이다. 다시말해 테스트 코드를 이용하면 함수를 다양한 조건에서 실행해 볼 수 있는데, 이때 실행 결과와 기대 결과를 비교할 수 있다. 대표적인 자바스크립트 라이브러리는 아래와 같다.
- Mocha – 핵심 테스트 프레임워크로, describe, it과 같은 테스팅 함수와 테스트 실행 관련 주요 함수를 제공한다. 자체적으로 assertion은 제공하지 않지만 대부분의 assertion 라이브러리를 따로 가져와 사용할 수 있다.
- Chai – 다양한 assertion을 제공해 주는 라이브러리 (should, expect, assert 와 같은 인터페이스를 제공하는 Node.js 기반의 모듈)
* assertion: 에러가 없는 프로그램을 작성하기 위한 하나의 수법으로 작성한 함수가 잘 동작하고 제대로 된 값을 반환하는 지 여부를 검증해주는 것
https://ko.javascript.info/testing-mocha
expect 함수
expect의 사용법은 아래와 같다.expect(테스트하는값).기대하는조건
expect(isEven(3)).to.be.true => 'isEven(3)'의 결과값은 참(true)이어야 한다'
expect(1 + 2).to.equal(3) => 'sum(1, 2)의 결과값은 3과 같아야(equal) 한다'
'참인 것이어야 한다' => to.be.true
'3과 같아야 한다' => to.equal(3)
expect 함수 구조
describe("title", function() { ... })
구현하고자 하는 기능에 대한 설명이 들어간다. it 블록을 한데 모아주는 역할도 한다.
it("유스 케이스 설명", function() { ... })
it의 첫 번째 인수엔 특정 유스 케이스에 대한 설명이 들어간다. 이 설명은 누구나 읽을 수 있고 이해할 수 있는 자연어로 적어준다. 두 번째 인수엔 유스 케이스 테스트 함수가 들어간다.
describe('expect에 대해서 학습합니다.', function () {
it('테스트하는 값(expect의 전달인자)이 true인지의 여부를 검사합니다.', function () {
expect(true).to.be.true;
});
it('테스트하는 값(expect의 전달인자)이 falsy 여부를 검사합니다.', function () {
expect(false).to.be.false;
});
it('테스트하는 값(expect의 전달인자)이 falsy 여부를 검사합니다.', function () {
expect(false).to.be.false; // 0이나 ''를 넣으면 작동이 안 된다. false를 넣어야 조건 충족. ****
});
it("'테스트하는 값'을 '기대하는 값'과 비교한 결과가 참 인지 확인합니다.", function () {
// '테스트하는 값'은 우리가 작성한 어떤 코드의 실제 실행 결과 값이므로 '실제 값'이라고 불러도 된다.
let actualValue = 1 + 1;
let expectedValue = 2; // 1+1를 넣어도 된다.
expect(actualValue === expectedValue).to.be.true;
});
/*
이처럼 to.be.true, to.be.false 만을 가지고도 많은 테스트 케이스를 작성할 수 있다.
하지만 이는 직관적이지 않고 다소 불편하다.
두 값 A와 B를 '비교한 결과'가 참인지를 확인하는 대신에 직접 A가 B와 같은지 확인하는 matcher가 바로!!
.equal이다. 아래 테스트 코드는 '테스트하는값'이 '기대하는값'과 같은지 직접 확인한다.
expect('테스트하는값').to.equal('기대하는값');
*/
it('Matcher .equal 의 사용법을 학습합니다.', function () {
let expectedValue = 1+1; // 2도 된다.
// .equal은 두 값이 타입까지 엄격하게 같은지 검사(strict equality, ===)한다. 📌
expect(1 + 1).to.equal(expectedValue);
});
it('Matcher .equal의 사용법을 학습합니다.', function () {
let actualValue = (1 + 1).toString();
expect(actualValue).to.equal('2'); // TODO
});
});
참고
https://www.happykoo.net/@happykoo/posts/61
https://www.happykoo.net/@happykoo/posts/63
'FE > JavaScript' 카테고리의 다른 글
[JS] test를 통한 const 개념 익히기 _Koans (0) | 2023.03.05 |
---|---|
[JS] test를 통한 type 개념 익히기 _Koans (2) | 2023.03.05 |
[JS] spread/rest (0) | 2023.03.03 |
[JS] Spread syntax 용례 (0) | 2023.03.03 |
[JS] 화살표 함수 (0) | 2023.03.03 |