mirror of
https://github.com/nestjs/nest.git
synced 2026-02-21 23:11:44 +00:00
test(sample-05): added unit tests
This commit is contained in:
14
sample/05-sql-typeorm/jest.json
Normal file
14
sample/05-sql-typeorm/jest.json
Normal 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"]
|
||||
}
|
||||
10
sample/05-sql-typeorm/package-lock.json
generated
10
sample/05-sql-typeorm/package-lock.json
generated
@@ -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",
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
101
sample/05-sql-typeorm/src/users/users.controller.spec.ts
Normal file
101
sample/05-sql-typeorm/src/users/users.controller.spec.ts
Normal 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();
|
||||
});
|
||||
});
|
||||
});
|
||||
83
sample/05-sql-typeorm/src/users/users.service.spec.ts
Normal file
83
sample/05-sql-typeorm/src/users/users.service.spec.ts
Normal 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');
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user