본문 바로가기

[JS] 테스트케이스 expect _Koans

[JS] 테스트케이스 expect _Koans

Koans는 불교에서 유래된 단어로, 결론을 내리기 전에 이게 왜 맞는지 깊게 고민한다는 의미를 가지고 있다고 한다. 답이 미리 제시되어 있기 때문에 고민 없이 풀면, 큰 어려움 없이 전부 다 풀 수 있지만 그게 왜 정답인지 깊게 고민해 보는 시간을 갖지 않는다면 충분히 성장하기 어려울 것이다. 즉, '왜?' 라는 물음에 대해 꼭 깊은 고찰을 하고 넘어가자는 의미이다.

 


코딩테스트 문제를 풀 때 내가 짠 코드를 콘솔에 수동으로 하나하나 찍지 않아도, A의 상황일 때 통과하는지 B의 상황일 때 통과하는지 등을 바로바로 알려주는 것이 바로 테스트 자동화이다. 다시말해 테스트 코드를 이용하면 함수를 다양한 조건에서 실행해 볼 수 있는데, 이때 실행 결과와 기대 결과를 비교할 수 있다. 대표적인 자바스크립트 라이브러리는 아래와 같다.

 

  • Mocha – 핵심 테스트 프레임워크로, describe, it과 같은 테스팅 함수와 테스트 실행 관련 주요 함수를 제공한다. 자체적으로 assertion은 제공하지 않지만 대부분의 assertion 라이브러리를 따로 가져와 사용할 수 있다.
  • Chai – 다양한 assertion을 제공해 주는 라이브러리 (should, expect, assert 와 같은 인터페이스를 제공하는 Node.js 기반의 모듈)

* assertion: 에러가 없는 프로그램을 작성하기 위한 하나의 수법으로 작성한 함수가 잘 동작하고 제대로 된 값을 반환하는 지 여부를 검증해주는 것 

 

https://ko.javascript.info/testing-mocha

 

테스트 자동화와 Mocha

 

ko.javascript.info

 

expect  함수

expect의 사용법은 아래와 같다.
expect(테스트하는값).기대하는조건
expect(isEven(3)).to.be.true => 'isEven(3)'의 결과값은 참(true)이어야 한다'
expect(1 + 2).to.equal(3) => 'sum(1, 2)의 결과값은 3과 같아야(equal) 한다'
 
 
'기대하는 조건'에 해당하는 함수를 matcher라고 한다. boolen 값 뿐만 아니라 구체적 값이 될 수 있다.
'참인 것이어야 한다' => to.be.true
'3과 같아야 한다' => to.equal(3)
 

아래 링크를 보면 mocha, chai framework에는 다양한 matcher가 있다.
 

Expect / Should - Chai

The BDD styles are expect and should. Both use the same chainable language to construct assertions, but they differ in the way an assertion is initially constructed. Check out the Style Guide for a comparison. .deep Causes all .equal, .include, .members, .

www.chaijs.com

 


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

 

해피쿠 블로그 - [Mocha] 테스트 프레임워크 Mocha로 Node.js 테스트 하기

누구나 손쉽게 운영하는 블로그!

www.happykoo.net

https://www.happykoo.net/@happykoo/posts/63

 

해피쿠 블로그 - [Mocha] chai 구문 사용하기

누구나 손쉽게 운영하는 블로그!

www.happykoo.net

 

728x90

'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
⬆︎