Skip to content

Commit 6adcfa1

Browse files
committed
test(sample-07): added unit tests
1 parent 5974b6f commit 6adcfa1

3 files changed

Lines changed: 201 additions & 0 deletions

File tree

sample/07-sequelize/package.json

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,5 +53,22 @@
5353
"eslint-config-prettier": "8.3.0",
5454
"eslint-plugin-import": "2.24.2",
5555
"typescript": "4.3.5"
56+
},
57+
"jest": {
58+
"moduleFileExtensions": [
59+
"js",
60+
"json",
61+
"ts"
62+
],
63+
"rootDir": "src",
64+
"testRegex": ".spec.ts$",
65+
"transform": {
66+
"^.+\\.(t|j)s$": "ts-jest"
67+
},
68+
"collectCoverageFrom": [
69+
"**/*.(t|j)s"
70+
],
71+
"coverageDirectory": "../coverage",
72+
"testEnvironment": "node"
5673
}
5774
}
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
import { Test, TestingModule } from '@nestjs/testing';
2+
import { CreateUserDto } from './dto/create-user.dto';
3+
import { UsersController } from './users.controller';
4+
import { UsersService } from './users.service';
5+
6+
const createUserDto: CreateUserDto = {
7+
firstName: 'firstName #1',
8+
lastName: 'lastName #1',
9+
};
10+
11+
describe('UsersController', () => {
12+
let usersController: UsersController;
13+
let usersService: UsersService;
14+
15+
beforeEach(async () => {
16+
const app: TestingModule = await Test.createTestingModule({
17+
controllers: [UsersController],
18+
providers: [
19+
UsersService,
20+
{
21+
provide: UsersService,
22+
useValue: {
23+
create: jest
24+
.fn()
25+
.mockImplementation((user: CreateUserDto) =>
26+
Promise.resolve({ id: 'a id', ...user }),
27+
),
28+
findAll: jest.fn().mockResolvedValue([
29+
{
30+
firstName: 'firstName #1',
31+
lastName: 'lastName #1',
32+
},
33+
{
34+
firstName: 'firstName #2',
35+
lastName: 'lastName #2',
36+
},
37+
]),
38+
findOne: jest.fn().mockImplementation((id: string) =>
39+
Promise.resolve({
40+
firstName: 'firstName #1',
41+
lastName: 'lastName #1',
42+
id,
43+
}),
44+
),
45+
remove: jest.fn(),
46+
},
47+
},
48+
],
49+
}).compile();
50+
51+
usersController = app.get<UsersController>(UsersController);
52+
usersService = app.get<UsersService>(UsersService);
53+
});
54+
55+
it('should be defined', () => {
56+
expect(usersController).toBeDefined();
57+
});
58+
59+
describe('create()', () => {
60+
it('should create an user', () => {
61+
usersController.create(createUserDto);
62+
expect(usersService.create).toHaveBeenCalled();
63+
expect(usersService.create).toHaveBeenCalledWith(createUserDto);
64+
expect(usersController.create(createUserDto)).resolves.toEqual({
65+
id: 'a id',
66+
...createUserDto,
67+
});
68+
});
69+
});
70+
71+
describe('findAll()', () => {
72+
it('should find all users ', () => {
73+
usersController.findAll();
74+
expect(usersService.findAll).toHaveBeenCalled();
75+
});
76+
});
77+
78+
describe('findOne()', () => {
79+
it('should find a user', () => {
80+
usersController.findOne('anyid');
81+
expect(usersService.findOne).toHaveBeenCalled();
82+
expect(usersController.findOne('a id')).resolves.toEqual({
83+
firstName: 'firstName #1',
84+
lastName: 'lastName #1',
85+
id: 'a id',
86+
});
87+
});
88+
});
89+
90+
describe('remove()', () => {
91+
it('should remove the user', () => {
92+
usersController.remove('anyid');
93+
expect(usersService.remove).toHaveBeenCalled();
94+
});
95+
});
96+
});
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
import { Test, TestingModule } from '@nestjs/testing';
2+
import { User } from './user.model';
3+
import { UsersService } from './users.service';
4+
import { getModelToken } from '@nestjs/sequelize';
5+
import { Model } from 'sequelize-typescript';
6+
import { fn } from 'sequelize';
7+
8+
const userArray = [
9+
{
10+
firstName: 'firstName #1',
11+
lastName: 'lastName #1',
12+
},
13+
{
14+
firstName: 'firstName #2',
15+
lastName: 'lastName #2',
16+
},
17+
];
18+
19+
const oneUser = {
20+
firstName: 'firstName #1',
21+
lastName: 'lastName #1',
22+
};
23+
24+
describe('UserService', () => {
25+
let service: UsersService;
26+
let model: typeof User;
27+
28+
beforeEach(async () => {
29+
const module: TestingModule = await Test.createTestingModule({
30+
providers: [
31+
UsersService,
32+
{
33+
provide: getModelToken(User),
34+
useValue: {
35+
findAll: jest.fn(() => userArray),
36+
findOne: jest.fn(),
37+
save: jest.fn(),
38+
remove: jest.fn(),
39+
destroy: jest.fn(() => oneUser),
40+
},
41+
},
42+
],
43+
}).compile();
44+
45+
service = module.get<UsersService>(UsersService);
46+
model = module.get<typeof User, any>(getModelToken(User));
47+
});
48+
49+
it('should be defined', () => {
50+
expect(service).toBeDefined();
51+
});
52+
53+
describe('create()', () => {
54+
it('should successfully insert a user', () => {
55+
const user = {
56+
firstName: 'firstName #1',
57+
lastName: 'lastName #1',
58+
};
59+
expect(user).toEqual(user);
60+
});
61+
});
62+
63+
describe('findAll()', () => {
64+
it('should return an array of users', async () => {
65+
const users = await service.findAll();
66+
expect(users).toEqual(userArray);
67+
});
68+
});
69+
70+
describe('findOne()', () => {
71+
it('should get a single user', () => {
72+
const findSpy = jest.spyOn(model, 'findOne');
73+
expect(service.findOne('id'));
74+
expect(findSpy).toBeCalledWith({ where: { id: 'id' } });
75+
});
76+
});
77+
78+
describe('remove()', () => {
79+
it('should remove a user', async () => {
80+
const findSpy = jest.spyOn(model, 'findOne').mockReturnValue({
81+
destroy: jest.fn(),
82+
} as any);
83+
const retVal = await service.remove('id');
84+
expect(findSpy).toBeCalledWith({ where: { id: 'id' } });
85+
expect(retVal).toBeUndefined();
86+
});
87+
});
88+
});

0 commit comments

Comments
 (0)