테스팅 할 대상을 정확하게 처리해야 한다.
단위 테스트는 모킹이 핵심이다.
User.findOne도 대체를 해야 한다.
jest.mock('경로);
const User= require("경로");
가짜로 바꾼 다음에 모킹을 함.
User.findOne.mockReturnValue(Promise.reject(error));
이렇게 붙혀주면 무조건 확정적으로 그 함수가 리턴하는 것처럼 가짜로 만들 수 있음.
단순하게 리턴 값만 넣는 것도 아니고 그 안에 객체리턴 가능
User.findOne.mockReturnValue(Promise.resolve({
id:1,name:'asdf',
addFollowings(value){
return Promise.resolve(true);
}
}));
test coverage
테스트 한게 있다면 그 파일 내부에 얼마나 차지하는지
jest --coverage
supertest 통합테스트
라우터 안에 islogged in, addfollowing 같은 것들이 다 같이 돌아가야 정상이 된다는 점을 이용해 합쳐서 시뮬레이션 하는 것들
테스트용 서버 app.listen 만 뺀 부분, module exports app;
한 것
진짜 서버는 그대로 유지
처음 가입한 이후에 같은 이메일로 테스트 하기에 오류가 발생함. 이런 것들을 무조건 2~3회 돌려보기.
const agent = request.agent(app);
beforeEach((done) => {
agent
.post("/auth/login")
.send({
email: "zerohch0@gmail.com",
password: "nodejsbook",
})
.end(done);
});
agent를 먼저 만들어보는 장점은 그 상태가 앞으로도 계속 유지된다는 장점이 있음.
describe 단위로 beforeEach는 모든 테스트 시작 전에, afterEach는 모든 테스트 이후
부하 테스트 아킬로 JAVA,
artillery JS
자기가 짠 코드는 최대한 많이 테스트 하기
npm 설치한 패키지는 테스트 X
패키지 라이브러리 사용하는 부분만 테스트
테스크 어려운 패키지는 모킹
모킹해서 통과한 패키지라도 실제는 에러 가능성 있음
시스템 테스트: QA처럼 테스트 목록 만들고 체크 하면서 진행하는 방법
인수 테스트 : 알파 테스트/ 베타테스트 특정 사용자 집단이 실제로 테스트
다양한 종류의 테스트를 주기적으로 수행해 서비스를 안정적으로 유지하는 것이 좋음.