I did the setup completely according to the documentation in a clean project and nothing works for me. I don’t understand what the error is related to and in which direction to move to solve it
app.module.ts
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { UsersModule } from './users/users.module';
@Module({
imports: [UsersModule,
TypeOrmModule.forRoot({
type: 'postgres',
host: 'localhost',
port: 5432,
username: 'root1',
password: 'root',
database: 'test2',
autoLoadEntities: true,
synchronize: true,
}),
],
})
export class AppModule {}
user.module.ts
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { User } from './user.entity';
import { UsersController } from './users.controller';
import { UsersService } from './users.service';
@Module({
imports: [TypeOrmModule.forFeature([User])],
providers: [UsersService],
controllers: [UsersController],
})
export class UsersModule {}
user.service.ts
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { CreateUserDto } from './dto/create-user.dto';
import { User } from './user.entity';
@Injectable()
export class UsersService {
constructor(
@InjectRepository(User)
private readonly usersRepository: Repository<User>,
) {}
create(createUserDto: CreateUserDto): Promise<User> {
const user = new User();
user.firstName = createUserDto.firstName;
user.lastName = createUserDto.lastName;
return this.usersRepository.save(user);
}
async findAll(): Promise<User[]> {
return this.usersRepository.find();
}
findOne(id: number): Promise<User> {
return this.usersRepository.findOneBy({ id: id });
}
async remove(id: string): Promise<void> {
await this.usersRepository.delete(id);
}
}
users.service.spec.ts
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),
findOneBy: jest.fn().mockResolvedValue(oneUser),
save: jest.fn().mockResolvedValue(oneUser),
remove: 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 oneUser = {
firstName: 'firstName #1',
lastName: 'lastName #1',
};
expect(
service.create({
firstName: 'firstName #1',
lastName: 'lastName #1',
}),
).resolves.toEqual(oneUser);
});
});
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, 'findOneBy');
expect(service.findOne(1)).resolves.toEqual(oneUser);
expect(repoSpy).toBeCalledWith({ id: 1 });
});
});
describe('remove()', () => {
it('should call remove with the passed value', async () => {
const removeSpy = jest.spyOn(repository, 'delete');
const retVal = await service.remove('2');
expect(removeSpy).toBeCalledWith('2');
expect(retVal).toBeUndefined();
});
});
});
users.controller.ts
import {
Body,
Controller,
Delete,
Get,
Param,
Post,
ParseIntPipe,
} from '@nestjs/common';
import { CreateUserDto } from './dto/create-user.dto';
import { User } from './user.entity';
import { UsersService } from './users.service';
@Controller('users')
export class UsersController {
constructor(private readonly usersService: UsersService) {}
@Post()
create(@Body() createUserDto: CreateUserDto): Promise<User> {
return this.usersService.create(createUserDto);
}
@Get()
findAll(): Promise<User[]> {
return this.usersService.findAll();
}
@Get(':id')
findOne(@Param('id', ParseIntPipe) id: number): Promise<User> {
return this.usersService.findOne(id);
}
@Delete(':id')
remove(@Param('id') id: string): Promise<void> {
return this.usersService.remove(id);
}
}
user.entity.ts
import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm';
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
firstName: string;
@Column()
lastName: string;
@Column({ default: true })
isActive: boolean;
}
I can’t even start a test project with nestjs typeorm from GitHub. Maybe my database settings are incorrect? Or project config file