I'm testing my application using jest for unit testing in my service. I'm having trouble understanding how I would test a method of creating a new user, methods within it have others that validate if this user already exists (find : username), I get the password and use a hash to encrypt, in addition to using websocket for the created to identify a new user and reflect to all logged in users that a new user was. However, I'm getting an error in my test unit in my new user method.
My service:
async registerUser(user: createUser): Promise<createUser> {
const userFound = await this.userModel.findOne({ username: user.username });
if (userFound) {
throw new BadRequestException('Usuario ja existe.');
}
user.password = await Criptography.encodePwd(user.password);
const userCreate = await this.userModel.create(user);
this.socketGateway.emitnewUser(userCreate);
return userCreate;
}
My test using jest:
const userModelTest: User[] = [
new User({ _id: '89d58w5',username: 'testUser50',password: '123456',name: 'teste1',role: 'operador', WebSocket: 'mywebsocket1',
}),
];
describe('userservice', () => {
let userService: Userservice;
let userRepository: Model<User>;
beforeEach(async () => {
const userMockRepository = {
find: jest.fn().mockResolvedValue(userModelTest),
findAll: jest.fn().mockResolvedValue(userModelTest),
findById: jest.fn(),
findOne: jest.fn().mockResolvedValue(userModelTest[0]),
registerUser: jest.fn().mockReturnValue(userModelTest[0]),
exec: jest.fn().mockImplementation(),
findByIdAndUpdat: jest.fn(),
findOneAndDelete: jest.fn(),
listUsers: jest.fn().mockImplementation(),
create: jest.fn().mockResolvedValue( {
username: 'testUser1',
password: '123456',
name: 'teste1',
role: 'operador',
})
};
const module: TestingModule = await Test.createTestingModule({
providers: [
Userservice,
AppGateway,
{
provide: getModelToken('User'),
useValue: userMockRepository,
},
],
}).compile();
userService = module.get<Userservice>(Userservice);
userRepository = module.get<Model<User>>(getModelToken('User'));
});
DESCRIBE TEST:
describe('Create', ()=>{
it('Create New User', async ()=>{
const data : createUser = {
username: 'testUser1',
password: '123456',
name: 'teste1',
role: 'operar',
}
const userAlreadyExists = await userService.findOne(data.username)
expect(userAlreadyExists).toBe(true)
const result = await userService.registerUser(data)
expect(result).toEqual( data)
const encode = await userService
console.log(result)
})
});
ERROR:
BadRequestException: User already exist.
46 | const userFound = await this.userModel.findOne({ username: user.username });
47 | if (userFound) {
> 48 | throw new BadRequestException('Usuario ja existe.');
| ^
49 | }
50 |
51 | user.password = await Criptography.encodePwd(user.password);
at Userservice.registerUser (users/shared/user.service.ts:48:13)
at Object.<anonymous> (users/shared/user.service.spec.ts:120:22)