Back End/NestJS
[NestJS] #3 Unit Testing
YJ_SW
2022. 9. 15. 17:14
728x90
3.0 Introduction to Testing in Nest
package.json
...
"test": "jest",
"test:watch": "jest --watch",
"test:cov": "jest --coverage",
"test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
"test:e2e": "jest --config ./test/jest-e2e.json"
...
Jest : 자바스크립트를 쉽게 테스팅하는 npm 패키지이다.
~.spec.ts 는 테스트를 포함한 파일이다.
테스팅하고 싶은 파일명에 .spec.ts 붙이면 된다.
- 유닛 테스팅서비스에서 분리된 유닛을 테스트하는 것
- function 하나를 따로 따로 테스트하는 것
- E2E 테스팅사용자가 취할만한 액션들을 처음부터 끝까지 테스트하는 것
- ex ) 이페이지 가면 특정 페이지가 나와야 하는 경우
- 모든 시스템을 테스팅하는 것
3.1 Your first Unit Test
movies.service.spec.ts
...
it("should be 4",() => {
expect(2+2).toEqual(4)
})
...
it : individual test ( 개별 테스트 )
테스트하고 싶어하는 부분을 테스트하는 function을 만든다.
npm run test:watch
파일을 저장하면 test 통과하는지 자동 실행한다.
성공시
실패시
3.2 Testing getAll and getOne
movies.service.spec.ts
describe("getAll", () => {
it('should return an array',() => {
const result = service.getAll();
expect(result).toBeInstanceOf(Array)
})
})
describe("getOne()",() => {
it("should return a movie",() => {
service.create({title:"Test Movie",genres:['test'],year:2022})
const movie = service.getOne(1)
expect(movie).toBeDefined()
expect(movie.id).toEqual(1)
})
it('should throw 404 error',() => {
try{
service.getOne(999);
}catch(e){
expect(e).toBeInstanceOf(NotFoundException)
expect(e.message).toEqual('Movie with id 999 Not Found')
}
})
})
3.3 Testing delete and create
describe("deleteOne()",() => {
it("deletes a movie",() => {
service.create({title:"Test Movie",genres:['test'],year:2022})
const beforeDelete = service.getAll().length
service.deleteOne(1)
const afterDelete = service.getAll().length
expect(afterDelete).toBeLessThan(beforeDelete);
})
it("should return a 404",() => {
try{
service.deleteOne(999);
} catch(e){
expect(e).toBeInstanceOf(NotFoundException)
}
})
})
describe("create",() => {
it('should create a movie',() => {
const beforeCreate = service.getAll().length
service.create({title:"Test Movie",genres:['test'],year:2022})
const afterCreate = service.getAll().length
expect(afterCreate).toBeGreaterThan(beforeCreate)
})
})
3.4 Testing Update
describe('update', () => {
it("should update a movie",() => {
service.create({title:"Test Movie",genres:['test'],year:2022})
service.update(1,{title:"Update Test"})
const updatedMovie = service.getOne(1)
expect(updatedMovie.title).toEqual("Update Test")
})
it("should return a 404",() => {
try{
service.update(999,{title:"Update Test"});
} catch(e){
expect(e).toBeInstanceOf(NotFoundException)
}
})
})
beforeEach, afterEach, beforeAll, afterAll 등 많을 hook 활용해서 test 해볼 수 있다.
ex) afterAll : clear testing case
출처
728x90