• Home
  • About
    • Lajancia Workspace photo

      Lajancia Workspace

      .

    • Learn More
    • Email
    • LinkedIn
    • Instagram
    • Tumblr
    • Github
  • Posts
    • All Posts
    • All Tags
  • Projects
  • Record
  • Blender
  • Blockchain

TEST

05 Jan 2022

Reading time ~1 minute

서비스 테스트


왜 때문에 테스트?

  1. 자신이 만든 서비스가 제대로 동작하는지 테스트해야 한다.
    1. 아무리 철저하게 테스트해도 에러를 완전히 막을 수는 없음
    2. 기능이 많다면 수작업으로 테스트하기 힘듦
    3. 아무리 철저하게 테스트해도 에러를 완전히 막을 수는 없음
  2. 테스트하면 좋은 점
    1. 사소한 에러로 인해 프로그램이 고장나는 것을 막을 수 있음
    2. 프로그램이 자동으로 어떤 부분이 고장나는지 알려줌

프로그램을 테스트하는 프로그램을 만들면 시간을 절약할 수 있다.

테스트하는 습관을 들여두자

Jest 사용하기

npm i jest
  • 코드에 spec이 들어가면 테스트로 인식한다.

간단한 테스트 문구

test('1+1은 2입니다',()=>{expect(1+1).toEqueal(3);});

단위 테스트 (유닛 테스트)

별도로 떼어내어 분리 가능한 코드의 테스트를 진행함

const {isLoggedIn, isNotLoggedIn} =require('./middlewares');
describe('isLoggedIn',()=>{
const req={ isAuthernticated : jest.fn(()=>true),
const res={};
const next=jest.fn() //가짜 next

test('로그인되어 있으면 isLoggedIn이 next를 호출해야 함',()=>{
	isLoggedIn(req,res,next); //가짜로 만든 값을 넣어서 실행
	expext(next).toBeCalledTimes(1); //next가 호출되는지 확인
});
test('로그인되어 있지 않으면 isLoggedIn이 next를 호출해야 함',()->{
	const req={ isAuthernticated : jest.fn(()=>true),
	isLoggedIn(req,res,next);
	expect(res.status).toBeCalledWith(403);
	exprect(res.send).toBeCalledWith('로그인 필요');
		expext(isNotLoggedIn()).toEqual();
});
}
  • 하나의 test 안에 expect가 여러개일 경우 다 만족시켜야 함

컨트롤러 분리

const { addFollowing} = require('./user');
describe('addFollowing', () =>{
	const req={};
	const res={ send: jest.fn(),};
	const next = jest.fn();
	test('사용자가 찾아 팔로잉을 추가하고 success를 응답해야 함',async()=>{
	await addFollowing(req,res,next);
	expect(res.send).toBeCalledWith('success');
});
	test('사용자를 못 찾으면 res.status(404).send(no user)를 호출함',async()=>{
	await addFollowing(req,res,next);
	expect(res.status).toBeCalledWith(404);
	expect(res.send).toBeCalledWith('no user');
});
	test('DB에서 에러가 발생하면 next(error)호출함',async()=>{
	const error = '테스트용 에러';
	await addFollowing(req,res,next);
	expect(next).toBeCalledWith(error);

});
  • 데이터베이스가 들어있을 경우

데이터베이스 모킹

유저 아이디를 이용한 테스트를 진행할 때 에러가 발생한다. 이는 테스트에 데이터베이스 사용이 포함되어있기 때문이다.

사용되는 User.findOne도 가짜를 만들어준다. →모킹

jest.mock("../models/user");
const User = require("../models/user");

User.findOne.mockReturnValue(Promise.resolve({ id: 1, name: "zerocho" }));
//user.findone을 실행하면 무조건 위의 아이디와 이름이 나오게 된다.
  • 단위 테스트는 모킹이 핵심이다.


corstestnodejs Share Tweet +1