: Just(테스트 프레임워크)
Jest란 코드가 제대로 동작하는지 확인하는 Test Case 를 만드는 페이스북이 개발한 'JS 테스팅 프레임워크'
(Test Case: 소프트웨어의 특정 기능, 모듈, 또는 코드 조각이 올바르게 동작하는지를 확인하기 위해 설계된 테스트의 단위)
일반적으로 React
응용 프로그램을 포함하여 JavaScript
코드를 테스트하는 데 사용
Jest는 테스트 환경, 어설션 라이브러리 및 테스트 작성 및 실행을 위한 다양한 유틸리티를 제공
-> layered architecture pattern
npm init -y
npm i jest -D
=> 일반 js 파일과 달리 테스트 모드 실행 파일은 다르게 표시된다.
-> layered architecture pattern
npm install
npm i jest supertest -D
EX.
module.exports = {
// 해당 패턴에 일치하는 경로가 존재할 경우 테스트를 하지 않고 넘어감
"testPathIgnorePatterns": ["/node_modules/"],
// 테스트 실행 시 각 TestCase에 대한 출력을 해준다.
verbose: true,
}
"scripts": {
"test": "NODE_ENV=test jest --forceExit",
"test:silent": "NODE_ENV=test jest --silent --forceExit",
"test:coverage": "NODE_ENV=test jest --coverage --forceExit",
"test:unit": "NODE_ENV=test jest __tests__/unit --forceExit",
"test:integration": "NODE_ENV=test jest __tests__/integration --forceExit"
},
scripts에 설정 코드를 작성한다.
"test:integration": "set NODE_ENV=test jest __tests__/integration --forceExit"
=> set NODE_ENV=test
로 작성하는 것이 오류가 안 난다.
파일 설정: tests/grammers/grammers.spec.js
npx jest __tests__/integation --forceExit --silent
npx jset -verbose
자주 사용하는 Mock expect 문법
.toHaveBeenCalledTimes(number)
.toHaveBeenCalledWith(arg1, arg2, ...)
-> Jest는 변경된 파일만 테스트하려고 시도
=> 프로젝트를 Git 저장소로 초기화하거나 변경된 파일들을 모두 커밋한 후에 테스트를 실행할 수 있다.
- Git 초기화(저장소가 아닌 경우)
git init
- 변경된 파일들을 스테이징하고 커밋
git add .
git commit -m "Initial commit"
- Jest 실행 (모든 테스트 실행)
npx jest
DB를 Mocking
PostRepository
클래스에서 사용하는 Posts
모델을 Mocking
할 수 없어 실제 DB가 계속 연결되어 있는 상태를 가지고 있는다.
=> DB를 Mocking
X
PostRepository
클래스에서 사용하는 Posts
모델을 모듈에서 가져와 바로 사용하는 것이 아닌,
=> 외부에서 해당하는 모델을 주입하도록 변경하여야 함
repositories/posts.repository.js
Posts
모델을 가져오는 것이 아닌
-> 생성자에서 PostsModel
을 전달 받도록 수정
class PostRepository {
constructor(postModel) {
this.postModel = postModel;
}
findAllPost = async () => {
const posts = await 'this.postModel'.findAll();
return posts;
};
생성자에서
PostsModel
을 전달 받도록 수정class PostRepository { constructor(postModel) { this.postModel = postModel; }
Posts
->this.postModel
services/posts.service.js
posts.service.js
에서 PostRepository
의 생성자를 호출할 때
-> Posts
모델을 삽입하여 의존성을 생성자 주입하도록 수정
const PostRepository = require('../repositories/posts.repository');
'const { Posts } = require("../models/index.js");'
class PostService {
postRepository = new PostRepository(Posts);
...
}