반응형
우선 calculate.js에 이렇게 적어주자
// calculator.js
const fn = {
add: (num1, num2) => num1 + num2,
getName: (callback) => {
const name = "Mike";
setTimeout(() => {
callback(name);
}, 2000);
},
};
module.exports = fn;
그리고 테스트코드 calculate.test.js에는 일케 적어주자
import fn from "./calculator";
test(`3초 후에 받아온 이름은 Mike? `, () => {
function callback(name) {
expect(name).toBe("Tom");
fn.getName(callback);
});
그리고 npm run test를 해보면! 다음과 같이 뜬다.
Tom!== Mike 임에도 불구하고 성공했다는 메시지가 뜬다
시간을 보면 1ms이다.
즉 setTimeout이 실행되지 않고 테스트코드가 종료되었기 때문이다.
그럼 어떻게 해야할까??
바로 다음과 같이 test코드의 파라미터에 done을 넣어주는 것이다.
이렇게 작성해주면 setTimeout이 실행된 후에 테스트코드가 종료된다.
import fn from "./calculator";
test("0+1은 1이야", () => {
expect(fn.add(0, 1)).toBe(1);
});
test(`3초 후에 받아온 이름은 Mike? `, (done) => { //done 추가
function callback(name) {
expect(name).toBe("Tom");
done(); //done 추가
}
fn.getName(callback);
});
npm run test를 하면 다음과 같은 화면이 나온다.
Tom!==Mike에서 에러가 나고, 5초가 끝난후에 테스트가 종료된다.
Tom을 Mike로 바꿔주면 테스트 통과
import fn from "./calculator";
test("0+1은 1이야", () => {
expect(fn.add(0, 1)).toBe(1);
});
test(`3초 후에 받아온 이름은 Mike? `, (done) => {
function callback(name) {
expect(name).toBe("Mike");//tome 을 mike로 바꿔봄
done();
}
fn.getName(callback);
});
걸린 시간도 2000ms이다.
반응형
'개발 > 테스트코드' 카테고리의 다른 글
queryByText와 getByText (0) | 2023.08.28 |
---|---|
리액트 모달 컴포넌트 테스트 (0) | 2023.08.27 |
fireEvent와 userEvent 차이 (0) | 2023.08.26 |
Jest로 큰지 작은지, truthy인지 falsy인지 테스트하기 (0) | 2022.04.07 |
js 테스트코드 작성하는법 : 기초 calculation (0) | 2022.03.30 |