From 88470dacdfd0155470a4af98963ca6c08024ff6b Mon Sep 17 00:00:00 2001 From: Tony133 Date: Thu, 21 Oct 2021 21:30:27 +0200 Subject: [PATCH 1/9] test(sample-14): added unit test and other improvements --- sample/14-mongoose-base/README.md | 2 +- sample/14-mongoose-base/package-lock.json | 10 +++ sample/14-mongoose-base/package.json | 28 ++++-- .../src/cats/cats.controller.spec.ts | 87 +++++++++++++++++++ .../src/cats/cats.controller.ts | 4 +- .../src/cats/cats.service.spec.ts | 78 +++++++++++++++++ .../14-mongoose-base/src/cats/cats.service.ts | 4 +- 7 files changed, 203 insertions(+), 10 deletions(-) create mode 100644 sample/14-mongoose-base/src/cats/cats.controller.spec.ts create mode 100644 sample/14-mongoose-base/src/cats/cats.service.spec.ts diff --git a/sample/14-mongoose-base/README.md b/sample/14-mongoose-base/README.md index f389a8c0e77..65289e5b2a7 100644 --- a/sample/14-mongoose-base/README.md +++ b/sample/14-mongoose-base/README.md @@ -1,4 +1,4 @@ -### Mongoose base sample +## Mongoose base sample ### Installation diff --git a/sample/14-mongoose-base/package-lock.json b/sample/14-mongoose-base/package-lock.json index dfc514428e0..3bbe0b5c7ce 100644 --- a/sample/14-mongoose-base/package-lock.json +++ b/sample/14-mongoose-base/package-lock.json @@ -1468,6 +1468,16 @@ "@types/istanbul-lib-report": "*" } }, + "@types/jest": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.0.2.tgz", + "integrity": "sha512-4dRxkS/AFX0c5XW6IPMNOydLn2tEhNhJV7DnYK+0bjoJZ+QTmfucBlihX7aoEsh/ocYtkLC73UbnBXBXIxsULA==", + "dev": true, + "requires": { + "jest-diff": "^27.0.0", + "pretty-format": "^27.0.0" + } + }, "@types/json-schema": { "version": "7.0.8", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.8.tgz", diff --git a/sample/14-mongoose-base/package.json b/sample/14-mongoose-base/package.json index f4f9e29f9a7..3a17fa78db6 100644 --- a/sample/14-mongoose-base/package.json +++ b/sample/14-mongoose-base/package.json @@ -32,8 +32,14 @@ "@nestjs/schematics": "8.0.4", "@nestjs/testing": "8.1.1", "@types/express": "4.17.13", + "@types/jest": "27.0.2", "@types/node": "14.17.27", "@types/supertest": "2.0.11", + "@typescript-eslint/eslint-plugin": "4.33.0", + "@typescript-eslint/parser": "4.33.0", + "eslint": "7.32.0", + "eslint-config-prettier": "8.3.0", + "eslint-plugin-import": "2.25.2", "jest": "27.3.1", "prettier": "2.4.1", "supertest": "6.1.6", @@ -41,11 +47,23 @@ "ts-loader": "9.2.6", "ts-node": "10.3.0", "tsconfig-paths": "3.11.0", - "@typescript-eslint/eslint-plugin": "4.33.0", - "@typescript-eslint/parser": "4.33.0", - "eslint": "7.32.0", - "eslint-config-prettier": "8.3.0", - "eslint-plugin-import": "2.25.2", "typescript": "4.3.5" + }, + "jest": { + "moduleFileExtensions": [ + "js", + "json", + "ts" + ], + "rootDir": "src", + "testRegex": ".spec.ts$", + "transform": { + "^.+\\.(t|j)s$": "ts-jest" + }, + "collectCoverageFrom": [ + "**/*.(t|j)s" + ], + "coverageDirectory": "../coverage", + "testEnvironment": "node" } } diff --git a/sample/14-mongoose-base/src/cats/cats.controller.spec.ts b/sample/14-mongoose-base/src/cats/cats.controller.spec.ts new file mode 100644 index 00000000000..05fd6eaabab --- /dev/null +++ b/sample/14-mongoose-base/src/cats/cats.controller.spec.ts @@ -0,0 +1,87 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { CatsController } from './cats.controller'; +import { CreateCatDto } from './dto/create-cat.dto'; +import { CatsService } from './cats.service'; + +describe('Cats Controller', () => { + let controller: CatsController; + let service: CatsService; + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [CatsController], + providers: [ + { + provide: CatsService, + useValue: { + findAll: jest.fn().mockResolvedValue([ + { + name: 'Cat #1', + breed: 'Bread #1', + age: 4, + }, + { + name: 'Cat #2', + breed: 'Breed #2', + age: 3, + }, + { + name: 'Cat #3', + breed: 'Breed #3', + age: 2, + }, + ]), + create: jest + .fn() + .mockImplementation((createCatDto: CreateCatDto) => + Promise.resolve({ _id: '1', ...createCatDto }), + ), + }, + }, + ], + }).compile(); + + controller = module.get(CatsController); + service = module.get(CatsService); + }); + + it('should be defined', () => { + expect(controller).toBeDefined(); + }); + + describe('create()', () => { + it('should create a new cat', async () => { + const createCatDto: CreateCatDto = { + name: 'Cat #1', + breed: 'Breed #1', + age: 4, + }; + + expect(controller.create(createCatDto)).resolves.toEqual({ + _id: '1', + ...createCatDto, + }); + }); + }); + + describe('findAll()', () => { + it('should get an array of cats', () => { + expect(controller.findAll()).resolves.toEqual([ + { + name: 'Cat #1', + breed: 'Bread #1', + age: 4, + }, + { + name: 'Cat #2', + breed: 'Breed #2', + age: 3, + }, + { + name: 'Cat #3', + breed: 'Breed #3', + age: 2, + }, + ]); + }); + }); +}); diff --git a/sample/14-mongoose-base/src/cats/cats.controller.ts b/sample/14-mongoose-base/src/cats/cats.controller.ts index 7ecfa03028f..7b3a451cbac 100644 --- a/sample/14-mongoose-base/src/cats/cats.controller.ts +++ b/sample/14-mongoose-base/src/cats/cats.controller.ts @@ -9,11 +9,11 @@ export class CatsController { @Post() async create(@Body() createCatDto: CreateCatDto) { - this.catsService.create(createCatDto); + return await this.catsService.create(createCatDto); } @Get() async findAll(): Promise { - return this.catsService.findAll(); + return await this.catsService.findAll(); } } diff --git a/sample/14-mongoose-base/src/cats/cats.service.spec.ts b/sample/14-mongoose-base/src/cats/cats.service.spec.ts new file mode 100644 index 00000000000..9cb8fafcbb5 --- /dev/null +++ b/sample/14-mongoose-base/src/cats/cats.service.spec.ts @@ -0,0 +1,78 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { CatsService } from './cats.service'; +import { Cat } from './interfaces/cat.interface'; +import { Model } from 'mongoose'; + +const mockCat = { + name: 'Cat #1', + breed: 'Breed #1', + age: 4, +}; + +describe('CatService', () => { + let service: CatsService; + let model: Model; + + const catsArray = [ + { + name: 'Cat #1', + breed: 'Breed #1', + age: 4, + }, + { + name: 'Cat #2', + breed: 'Breed #2', + age: 2, + }, + ]; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [ + CatsService, + { + provide: 'CAT_MODEL', + useValue: { + new: jest.fn().mockResolvedValue(mockCat), + constructor: jest.fn().mockResolvedValue(mockCat), + find: jest.fn(), + create: jest.fn(), + save: jest.fn(), + exec: jest.fn(), + }, + }, + ], + }).compile(); + + service = module.get(CatsService); + model = module.get>('CAT_MODEL'); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); + + it('should return all cats', async () => { + jest.spyOn(model, 'find').mockReturnValue({ + exec: jest.fn().mockResolvedValueOnce(catsArray), + } as any); + const cats = await service.findAll(); + expect(cats).toEqual(catsArray); + }); + + it('should insert a new cat', async () => { + jest.spyOn(model, 'create').mockImplementationOnce(() => + Promise.resolve({ + name: 'Cat #1', + breed: 'Breed #1', + age: 4, + }), + ); + const newCat = await service.create({ + name: 'Cat #1', + breed: 'Breed #1', + age: 4, + }); + expect(newCat).toEqual(mockCat); + }); +}); diff --git a/sample/14-mongoose-base/src/cats/cats.service.ts b/sample/14-mongoose-base/src/cats/cats.service.ts index 7067589d06a..1bbddc4da46 100644 --- a/sample/14-mongoose-base/src/cats/cats.service.ts +++ b/sample/14-mongoose-base/src/cats/cats.service.ts @@ -8,8 +8,8 @@ export class CatsService { constructor(@Inject('CAT_MODEL') private readonly catModel: Model) {} async create(createCatDto: CreateCatDto): Promise { - const createdCat = new this.catModel(createCatDto); - return createdCat.save(); + const createdCat = this.catModel.create(createCatDto); + return createdCat; } async findAll(): Promise { From 119794d40b2c6e06c39d6b8a6109e85c91ef4743 Mon Sep 17 00:00:00 2001 From: Tony133 Date: Thu, 21 Oct 2021 22:58:53 +0200 Subject: [PATCH 2/9] test(sample-14): updateds --- sample/14-mongoose-base/src/cats/cats.controller.spec.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sample/14-mongoose-base/src/cats/cats.controller.spec.ts b/sample/14-mongoose-base/src/cats/cats.controller.spec.ts index 05fd6eaabab..cbc427883cb 100644 --- a/sample/14-mongoose-base/src/cats/cats.controller.spec.ts +++ b/sample/14-mongoose-base/src/cats/cats.controller.spec.ts @@ -33,7 +33,7 @@ describe('Cats Controller', () => { create: jest .fn() .mockImplementation((createCatDto: CreateCatDto) => - Promise.resolve({ _id: '1', ...createCatDto }), + Promise.resolve({ _id: 'a id', ...createCatDto }), ), }, }, @@ -57,7 +57,7 @@ describe('Cats Controller', () => { }; expect(controller.create(createCatDto)).resolves.toEqual({ - _id: '1', + _id: 'a id', ...createCatDto, }); }); From c54a67bf74a839ef643ce677faaca9313363a236 Mon Sep 17 00:00:00 2001 From: Tony Date: Fri, 22 Oct 2021 10:45:57 +0200 Subject: [PATCH 3/9] Update sample/14-mongoose-base/src/cats/cats.controller.spec.ts Co-authored-by: Kamil Mysliwiec --- sample/14-mongoose-base/src/cats/cats.controller.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sample/14-mongoose-base/src/cats/cats.controller.spec.ts b/sample/14-mongoose-base/src/cats/cats.controller.spec.ts index cbc427883cb..2295a17facd 100644 --- a/sample/14-mongoose-base/src/cats/cats.controller.spec.ts +++ b/sample/14-mongoose-base/src/cats/cats.controller.spec.ts @@ -3,7 +3,7 @@ import { CatsController } from './cats.controller'; import { CreateCatDto } from './dto/create-cat.dto'; import { CatsService } from './cats.service'; -describe('Cats Controller', () => { +describe('CatsController', () => { let controller: CatsController; let service: CatsService; beforeEach(async () => { From 8448580ebd9a224307f6aefb747f7f5e557e7baa Mon Sep 17 00:00:00 2001 From: Tony Date: Fri, 22 Oct 2021 10:46:03 +0200 Subject: [PATCH 4/9] Update sample/14-mongoose-base/src/cats/cats.controller.spec.ts Co-authored-by: Kamil Mysliwiec --- sample/14-mongoose-base/src/cats/cats.controller.spec.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/sample/14-mongoose-base/src/cats/cats.controller.spec.ts b/sample/14-mongoose-base/src/cats/cats.controller.spec.ts index 2295a17facd..24886afabb8 100644 --- a/sample/14-mongoose-base/src/cats/cats.controller.spec.ts +++ b/sample/14-mongoose-base/src/cats/cats.controller.spec.ts @@ -6,6 +6,7 @@ import { CatsService } from './cats.service'; describe('CatsController', () => { let controller: CatsController; let service: CatsService; + beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ controllers: [CatsController], From fa22622f4283f80c9add136159c6d2daaf49e56a Mon Sep 17 00:00:00 2001 From: Tony133 Date: Mon, 25 Oct 2021 17:37:39 +0200 Subject: [PATCH 5/9] test(sample-14: improvements --- sample/14-mongoose-base/src/cats/cats.controller.spec.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sample/14-mongoose-base/src/cats/cats.controller.spec.ts b/sample/14-mongoose-base/src/cats/cats.controller.spec.ts index 24886afabb8..703569f08c2 100644 --- a/sample/14-mongoose-base/src/cats/cats.controller.spec.ts +++ b/sample/14-mongoose-base/src/cats/cats.controller.spec.ts @@ -34,7 +34,7 @@ describe('CatsController', () => { create: jest .fn() .mockImplementation((createCatDto: CreateCatDto) => - Promise.resolve({ _id: 'a id', ...createCatDto }), + Promise.resolve({ _id: '1', ...createCatDto }), ), }, }, @@ -58,7 +58,7 @@ describe('CatsController', () => { }; expect(controller.create(createCatDto)).resolves.toEqual({ - _id: 'a id', + _id: '1', ...createCatDto, }); }); From 3f1a4919878d0a94fdfe9a9f0d95adb9e93b0812 Mon Sep 17 00:00:00 2001 From: Tony133 Date: Tue, 26 Oct 2021 21:52:54 +0200 Subject: [PATCH 6/9] test(): updated annotations --- sample/14-mongoose-base/src/cats/cats.controller.spec.ts | 4 ++-- sample/14-mongoose-base/src/cats/cats.service.spec.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sample/14-mongoose-base/src/cats/cats.controller.spec.ts b/sample/14-mongoose-base/src/cats/cats.controller.spec.ts index 703569f08c2..25727b18b84 100644 --- a/sample/14-mongoose-base/src/cats/cats.controller.spec.ts +++ b/sample/14-mongoose-base/src/cats/cats.controller.spec.ts @@ -41,8 +41,8 @@ describe('CatsController', () => { ], }).compile(); - controller = module.get(CatsController); - service = module.get(CatsService); + controller = module.get(CatsController); + service = module.get(CatsService); }); it('should be defined', () => { diff --git a/sample/14-mongoose-base/src/cats/cats.service.spec.ts b/sample/14-mongoose-base/src/cats/cats.service.spec.ts index 9cb8fafcbb5..392ed92ffb0 100644 --- a/sample/14-mongoose-base/src/cats/cats.service.spec.ts +++ b/sample/14-mongoose-base/src/cats/cats.service.spec.ts @@ -44,7 +44,7 @@ describe('CatService', () => { ], }).compile(); - service = module.get(CatsService); + service = module.get(CatsService); model = module.get>('CAT_MODEL'); }); From 2113d86ac8be81dc4292596cbc53eedb3f4dc697 Mon Sep 17 00:00:00 2001 From: Tony Date: Wed, 27 Oct 2021 16:23:53 +0200 Subject: [PATCH 7/9] Update sample/14-mongoose-base/src/cats/cats.controller.ts Co-authored-by: Kamil Mysliwiec --- sample/14-mongoose-base/src/cats/cats.controller.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sample/14-mongoose-base/src/cats/cats.controller.ts b/sample/14-mongoose-base/src/cats/cats.controller.ts index 7b3a451cbac..4e0e5d327db 100644 --- a/sample/14-mongoose-base/src/cats/cats.controller.ts +++ b/sample/14-mongoose-base/src/cats/cats.controller.ts @@ -14,6 +14,6 @@ export class CatsController { @Get() async findAll(): Promise { - return await this.catsService.findAll(); + return this.catsService.findAll(); } } From 2788b8b6f1d5e4c69c3a648dbbe5862fd5d0c3ed Mon Sep 17 00:00:00 2001 From: Tony Date: Wed, 27 Oct 2021 16:23:58 +0200 Subject: [PATCH 8/9] Update sample/14-mongoose-base/src/cats/cats.controller.ts Co-authored-by: Kamil Mysliwiec --- sample/14-mongoose-base/src/cats/cats.controller.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sample/14-mongoose-base/src/cats/cats.controller.ts b/sample/14-mongoose-base/src/cats/cats.controller.ts index 4e0e5d327db..e04b507a1e2 100644 --- a/sample/14-mongoose-base/src/cats/cats.controller.ts +++ b/sample/14-mongoose-base/src/cats/cats.controller.ts @@ -9,7 +9,7 @@ export class CatsController { @Post() async create(@Body() createCatDto: CreateCatDto) { - return await this.catsService.create(createCatDto); + return this.catsService.create(createCatDto); } @Get() From ea25c7dfbd8b1506a7417575f4f0dc39936ba7ed Mon Sep 17 00:00:00 2001 From: Tony133 Date: Thu, 28 Oct 2021 17:52:24 +0200 Subject: [PATCH 9/9] test(): improvements --- .../src/cats/cats.service.spec.ts | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/sample/14-mongoose-base/src/cats/cats.service.spec.ts b/sample/14-mongoose-base/src/cats/cats.service.spec.ts index 392ed92ffb0..18d086802cd 100644 --- a/sample/14-mongoose-base/src/cats/cats.service.spec.ts +++ b/sample/14-mongoose-base/src/cats/cats.service.spec.ts @@ -9,23 +9,23 @@ const mockCat = { age: 4, }; +const catsArray = [ + { + name: 'Cat #1', + breed: 'Breed #1', + age: 4, + }, + { + name: 'Cat #2', + breed: 'Breed #2', + age: 2, + }, +]; + describe('CatService', () => { let service: CatsService; let model: Model; - const catsArray = [ - { - name: 'Cat #1', - breed: 'Breed #1', - age: 4, - }, - { - name: 'Cat #2', - breed: 'Breed #2', - age: 2, - }, - ]; - beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ providers: [