Jest 기초 문법과 비동기 테스트 방법
//테스트 코드 형태는 아래와 같다
const 변수 = require('../테스트할파일.js')
describe('테스트 그룹 이름', () => {
it('테스트1', () => {
expect( 테스트할 변수나 값 ).toBe( 결과 값 )
}
it('테스트2', () => {
expect( 테스트할 변수나 값 ).toBe( 결과 값 )
}
}
- describe
- 테스트를 그룹화, 테스트 단위를 묶는 가장 큰 단위
- test, it
- 기본 테스트를 진행
- test()와 it()은 동일한 기능을 수행
- expect
- 값을 테스트 할 때마다 사용
- 혼자 사용하지 않고, 아래의 형태로 사용
- expect( 테스트할 변수나 값 ).matcher함수( 결과 값 )
콜백 테스트
비동기 메소드는 이벤트 루프로 인해 나중에 처리되기 때문에, 비동기의 결과를 검증 하기위해선 콜백에 **expect()**를 사용해야한다.
여기서 중요한 건 done 이다.
done은 Jest Runner에게 명시적으로 이 테스트 함수는 비동기 코드를 테스트 하니 콜백 함수가 호출되는 지도 좀 봐달라고 알려주는 역할을 한다.
따라서 비동기 함수를 검증하려 할때 결과를 콜백 함수로 받는다면, 콜백 함수 인자에 done을 써주고, done()을 호출해서 끝내야 한다.
test("fetch a user", (done) => { // 콜백 인자에 done을 써서 비동기 함수 테스트임을 반드시 명시 !!
const cb = (user) => {
// 인자로 받은 리턴값 user객체가 해당 객체와 Equal일 경우 테스트
expect(user).toEqual({
id: 1,
name: "User1",
email: "1@test.com",
});
done(); // 비동기 실행 end
}
fetchUser(1, cb);
});
Promise 테스트
Promise 비동기 함수는 then() 을 통해 직관적으로 비동기 결과 실행을 검증 할 수 있다.
여기서 조심해야 할 점은 비동기 실행은 Jest Runner와 따로 놀기때문에 테스트가 제대로 안될 것이다.
따라서 Jest Runner에게 Promise가 resolve되게 기다리라고 명령을 설정해 줘야 하는 데, 이때 return 을 명시해주면 된다.
test("fetch a user", () => {
// Promise 객체 함수에 return을 써서, Jest Runner가 Promise가 resolve될때까지 기다려 주게 한다.
return fetchUser(1)
.then((user) => {
expect(user).toEqual({
id: 1,
name: "User1",
email: "1@test.com",
});
});
});
async / await 테스트
위의 생소한 코드들과 달리 async / await 문법은 빛을 발한다.
코드가 매우 깔끔해지며, 직관적으로 사용할 수 있다.
왠만한 비동기 함수를 검증할때는 해당 문법을 사용해서 검증 하기를 추천한다.
test("fetch a user", async () => {
const user = await fetchUser(1);
expect(user).toEqual({
id: 1,
name: "User1",
email: "1@test.com",
});
});
'Study > node.js' 카테고리의 다른 글
Node.js - TDD 시작하기 (1) (0) | 2023.11.16 |
---|---|
Node.js - TDD (Test Driven Development) (0) | 2023.11.15 |
[ Node.js ] Express 라우터(Router)란? (0) | 2022.11.30 |
[Express] 익스프레스 에러 핸들링 Error handling (0) | 2022.11.29 |
[Express] 익스프레스 restAPI의 PUT과 Patch의 차이점과 사용방법 (1) | 2022.11.29 |