test(sample-05): added unit tests

This commit is contained in:
Tony133
2021-09-04 21:28:22 +02:00
parent 5974b6fed1
commit ac3f458c56
5 changed files with 231 additions and 5 deletions

View File

@@ -0,0 +1,14 @@
{
"moduleFileExtensions": [
"ts",
"tsx",
"js",
"json"
],
"transform": {
"^.+\\.tsx?$": "babel-jest"
},
"testRegex": "/src/.*\\.(test|spec).(ts|tsx|js)$",
"collectCoverageFrom" : ["src/**/*.{js,jsx,tsx,ts}", "!**/node_modules/**", "!**/vendor/**"],
"coverageReporters": ["json", "lcov"]
}

View File

@@ -1850,6 +1850,16 @@
"@types/istanbul-lib-report": "*"
}
},
"@types/jest": {
"version": "27.0.1",
"resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.0.1.tgz",
"integrity": "sha512-HTLpVXHrY69556ozYkcq47TtQJXpcWAWfkoqz+ZGz2JnmZhzlRjprCIyFnetSy8gpDWwTTGBcRVv1J1I1vBrHw==",
"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",

View File

@@ -34,9 +34,15 @@
"@nestjs/schematics": "8.0.3",
"@nestjs/testing": "8.0.6",
"@types/express": "4.17.13",
"@types/jest": "^27.0.1",
"@types/node": "14.17.14",
"@types/supertest": "2.0.11",
"@types/ws": "7.4.7",
"@typescript-eslint/eslint-plugin": "4.29.3",
"@typescript-eslint/parser": "4.29.3",
"eslint": "7.32.0",
"eslint-config-prettier": "8.3.0",
"eslint-plugin-import": "2.24.2",
"jest": "27.1.0",
"prettier": "2.3.2",
"supertest": "6.1.6",
@@ -44,11 +50,23 @@
"ts-loader": "9.2.5",
"ts-node": "10.2.1",
"tsconfig-paths": "3.11.0",
"@typescript-eslint/eslint-plugin": "4.29.3",
"@typescript-eslint/parser": "4.29.3",
"eslint": "7.32.0",
"eslint-config-prettier": "8.3.0",
"eslint-plugin-import": "2.24.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"
}
}

View File

@@ -0,0 +1,101 @@
import { Test, TestingModule } from '@nestjs/testing';
import { CreateUserDto } from './dto/create-user.dto';
import { UsersController } from './users.controller';
import { UsersService } from './users.service';
const createUserDto: CreateUserDto = {
firstName: 'firstName #1',
lastName: 'lastName #1',
};
describe('AppController', () => {
let usersController: UsersController;
let usersService: UsersService;
beforeEach(async () => {
const app: TestingModule = await Test.createTestingModule({
controllers: [UsersController],
providers: [
UsersService,
{
provide: UsersService,
useValue: {
create: jest
.fn()
.mockImplementation((user: CreateUserDto) =>
Promise.resolve({ id: 'a id', ...user }),
),
findAll: jest.fn().mockResolvedValue([
{
firstName: 'firstName #1',
lastName: 'lastName #1',
},
{
firstName: 'firstName #2',
lastName: 'lastName #2',
},
]),
findOne: jest.fn().mockImplementation((id: string) =>
Promise.resolve({
firstName: 'firstName #1',
lastName: 'lastName #1',
id,
}),
),
remove: jest.fn(),
},
},
],
}).compile();
usersController = app.get<UsersController>(UsersController);
usersService = app.get<UsersService>(UsersService);
});
it('should be defined', () => {
expect(usersController).toBeDefined();
});
describe('create()', () => {
it('should create an user', () => {
const createUserDto: CreateUserDto = {
firstName: 'firstName #1',
lastName: 'lastName #1',
};
usersController.create(createUserDto);
expect(usersService.create).toHaveBeenCalled();
expect(usersService.create).toHaveBeenCalledWith(createUserDto);
expect(usersController.create(createUserDto)).resolves.toEqual({
id: 'a id',
...createUserDto,
});
});
});
describe('findAll()', () => {
it('should find all users ', () => {
usersController.findAll();
expect(usersService.findAll).toHaveBeenCalled();
});
});
describe('findOne()', () => {
it('should find a user', () => {
usersController.findOne('anyid');
expect(usersService.findOne).toHaveBeenCalled();
expect(usersController.findOne('a id')).resolves.toEqual({
firstName: 'firstName #1',
lastName: 'lastName #1',
id: 'a id',
});
});
});
describe('remove()', () => {
it('should remove the user', () => {
usersController.remove('anyid');
expect(usersService.remove).toHaveBeenCalled();
});
});
});

View File

@@ -0,0 +1,83 @@
import { Test, TestingModule } from '@nestjs/testing';
import { getRepositoryToken } from '@nestjs/typeorm';
import { User } from './user.entity';
import { UsersService } from './users.service';
import { Repository } from 'typeorm';
const userArray = [
{
firstName: 'firstName #1',
lastName: 'lastName #1',
},
{
firstName: 'firstName #2',
lastName: 'lastName #2',
},
];
const oneUser = {
firstName: 'firstName #1',
lastName: 'lastName #1',
};
describe('UserService', () => {
let service: UsersService;
let repository: Repository<User>;
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
providers: [
UsersService,
{
provide: getRepositoryToken(User),
useValue: {
find: jest.fn().mockResolvedValue(userArray),
findOne: jest.fn().mockResolvedValue(oneUser),
save: jest.fn(),
delete: jest.fn(),
},
},
],
}).compile();
service = module.get<UsersService>(UsersService);
repository = module.get<Repository<User>>(getRepositoryToken(User));
});
it('should be defined', () => {
expect(service).toBeDefined();
});
describe('create()', () => {
it('should successfully insert a user', () => {
const user = {
firstName: 'firstName #1',
lastName: 'lastName #1',
};
expect(user).toEqual(user);
});
});
describe('findAll()', () => {
it('should return an array of users', async () => {
const users = await service.findAll();
expect(users).toEqual(userArray);
});
});
describe('findOne()', () => {
it('should get a single user', () => {
const repoSpy = jest.spyOn(repository, 'findOne');
expect(service.findOne('a id')).resolves.toEqual(oneUser);
expect(repoSpy).toBeCalledWith('a id');
});
});
describe('remove()', () => {
it('should remove a user', async () => {
const removeUserSpy = jest.spyOn(service, 'delete');
service.delete('anyid');
expect(removeUserSpy).toHaveBeenCalledWith('anyid');
});
});
});