TDD(2) hook

kaitlin_k·2022년 4월 5일
0

TDD

목록 보기
2/4

테스트 코드를 작성할때 더미데이터만 저장된 데이터베이스를 사용하는데, post, delete, put 등의 요청을 실행하면 데이터가 변경된다. 따라서, 각 테스트 케이스를 실행하기 전에 데이터베이스를 초기화하고 더미데이터를 벌크 인서트 해주는 작업이 필요하다.

그때 사용할 수 있는 것이 before, after, beforeEach, afterEach 훅이다.

  • before는 describe 블록 내에세 it 코드들이 실행되기 전에 1회만 실행된다.
  • beforeEach는 describe 블록 내에서 it 코드들이 실행되기 전에 매번 실행된다.
  • after는 describe 블록 내에서 it 코드들이 모두 실행된 후에 1회만 실행된다.
  • afterEach는 describe 블록 내에서 it 코드들이 실행된 후에 매번 실행된다.

간단한 hook 사용

describe("suite1", () => {
  before(() => console.log("before1"));
  beforeEach(() => console.log("beforeEach1")); 
  after(() => console.log("after"));
  afterEach(() => console.log("afterEach"));
  it("test1", () => console.log("test1"));
  it("test2", () => console.log("test2"));
});


/*
suite
before
beforeEach
test1
  ✅test1
afterEach
beforeEach
test2
  ✅test2
afterEach
after
*/

비동기 hook

모든 훅들은 동기 또는 비동기로 동작시킬 수 있다. 테스트를 진행하기 전에 데이터베이스에 더미 데이터를 저장시킬 수 있다.

describe("Set up Database", () => {
  const users = [
    {
      userId: "test1",
      password: "helloworld123!",
      nickname: "test1_nickname",
    },
    {
      userId: "test2",
      password: "helloworld123!",
      nickname: "test2_nickname",
    },
    {
      userId: "test3",
      password: "helloworld123!",
      nickname: "test3_nickname",
    },
  ];
  beforeEach("Sync DB", (done) => {
    models.sequelize.sync({ force: true })
    .then(() => done()})
  });
  beforeEach("Bulk insert data", (done) => {
    models.User.bulkCreate(users);
    done();
  });
  
  describe("GET /users", () => {}); //생략
  describe("GET /users/:id", () => {});	//생략
  describe("DELETE /users/:id", () => {}); //생략

});

reference

profile
어제보다 나은 오늘을 만드는 중

0개의 댓글