07/11-1

Posted by:

|

On:

|

JEST수업

비동기 사용 방법(생각보다 많이 복잡함)

콜백함수를 사용하는 경우

예시로 0.1초 뒤에 동작하는 함수를 만들었다

function fetchUser(id,checkTest){
setTimeout(()=>{console.log("0.1초가 걸렸습니다")
const user={ id:id,name:"User"+id}
checkTest(user)},100);

const asyncfn={fetchUser};

module.exports=asyncfn;

Jest에서 쓰기 위한 .test.js 부분

const asyncfn=require("./asyncfn");

test("setTimeout확인",
(done)=>{expect
(asyncfn.fetchUser("Green",(user)=>
{expect(user).toEqual({id:"Green",name:"UserGreen"});
done();})
);
});

분석해보면 다음과 같다

일단 checkTest(user)가 없고 expect도 1개만 쓰인 경우expect(asyncfn.fetchUser("Green")).toEqual({id:"Green",name:"UserGreen"})

두가지 FAIL이 나온다. 첫번째는 0.1초 보다 더 짧게 진행했기 때문에 빈 값이라서 FAIL, 그리고 Cannot log after tests are done. Did you forget to wait for something async in your test? 을 보여주는 FAIL이 있다. 두번째는 0.1초 딜레이를 주는 함수를 써서 그 결과로 다음과 같이 나오게 된다.

그렇다고 setTimeout밖에 user 값을 해도 setTimeout 안에서만 쓰다 보니 밖에서는 아무런 값이 없게 되어서 의미가 없어진다

expect에 expect를 다시 넣은 경우

위와 같이 expect 안에 expect를 넣은 상황이다. 이 경우 밖의 test는 PASS가 되었지만 여전히 두번째 FAIL은 남아있다

이때 test의 함수부분의 매개변수에 done을 넣는다. 참고로 done()을 넣을 부분은 제일 안의 expect가 끝나고 다음에 넣어야 한다