1 분 소요

callback

비동기 코드 작성

fn.js

const fn = {
  getName:(callback) => {
    const name="Mike";
    setTimeout(()=>{
      callback(name);
    }, 3000)
  }, // 3초 후에 이름을 알려주는 함수
};
module.exports = fn;

테스트 코드 작성

fn.test.js

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

test("3초 후에 받아온 이름은 Mike", done => {
  function callback(name){
    expect(name).toBe("Mike");
    done();
  }
  fn.getName(callback);
}); // 테스트 성공

테스트 함수에 done이라는 콜백함수를 전달 -> done()이 호출되기 전까지 jest는 테스트를 끝내지 않고 기다린다.

try-catch

fn.js

const fn = {
  getName:(callback) => {
    const name="Mike";
    setTimeout(()=>{
      // callback(name);
      throw new Error('서버 에러...'); // 에러 전달
    }, 3000)
  }, 
};
module.exports = fn;

fn.test.js

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

test("3초 후에 받아온 이름은 Mike", done => {
  function callback(name){
    try{
      expect(name).toBe("Mike");
      done();
    } catch(error){
      done(); // '서버 에러...'가 터미널에 찍힌다.
    }
  }
  fn.getName(callback);
}); // 테스트 실패 

api 에러를 감지하고 싶다면 try-catch문으로 감싸준다.

promise

비동기 코드 작성

fn.js

const fn = {
  getAge:() => {
    const age=30;
    return new Promise((res,rej)=>{
      setTimeout(()=>{
        res(age);
        // rej('error'); // reject 상황을 테스트하기 위해서..
      }, 3000)
    });
  },

};
module.exports = fn;

promise를 넘겨주면 jest는 resolve 될 때까지 기다린다. 따라서 테스트 함수에 done을 전달하지 않아도 된다.

테스트 코드 작성

test("3초 후에 받아온 나이는 30", () => {
  return fn.getAge().then(age => { // 🌟
    expect(age).toBe(30);
  });
}); // 테스트 성공

🚨 비동기 코드에 promise를 사용했다면, 테스트 코드에서 return을 잊으면 안됨!

보다 간단히 작성하기 위한 Matcher 사용

resolves

test("3초 후에 받아온 나이는 30", () => {
  return expect(fn.getAge()).resolves.toBe(30);
}); // 테스트 성공

rejects

test("3초 후에 에러가 납니다.", () => {
  return expect(fn.getAge()).rejects.toMatch('error');
}); // 테스트 성공

async-await

비동기 코드 작성 -> ❓🤔❓

fn.js

const fn = async () => {
  getAge:() => {
    const age=30;
    setTimeout(()=>{
      return age;
    }, 3000)
  },

};
module.exports = fn;

테스트 코드 작성

test("3초 후에 에러가 납니다.", async () => { 
  const age = await fn.getAge();
  expect(age).toBe(30);
}); // 테스트 성공

보다 간단히 작성하기 위한 Matcher 사용

resolves

test("3초 후에 받아온 나이는 30", () => {
  await expect(fn.getAge()).resolves.toBe(30);
}); // 테스트 성공

return 대신 await으로 변경

rejects

test("3초 후에 에러가 납니다.", () => {
  await expect(fn.getAge()).rejects.toMatch('error');
}); // 테스트 성공

return 대신 await으로 변경

참고

코딩앙마



💛 개인 공부 기록용 블로그입니다. 👻

맨 위로 이동하기