【发布时间】:2021-09-14 18:14:53
【问题描述】:
我正在使用 Typeorm 在 Nestjs 中测试员工服务。该服务有一个注入的员工存储库。我的测试策略是模拟一个简单的存储库来测试服务。
import { Test, TestingModule } from '@nestjs/testing';
import { getRepositoryToken } from '@nestjs/typeorm';
import { getRepository, Repository } from 'typeorm';
import { CreateEmployeeDto } from './dto/create-employee.dto';
import { Employee } from './employee.entity';
import { EmployeesService } from './employees.service';
describe('EmployeesService', () => {
let service: EmployeesService;
const mockEmployeesRepository = {
save: jest.fn().mockImplementation((dto: CreateEmployeeDto) => {
return Promise.resolve({
EmployeeID: Math.ceil(Math.random() * 10),
...dto,
});
}),
};
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
providers: [
EmployeesService,
{
provide: getRepositoryToken(Employee),
useValue: mockEmployeesRepository,
},
],
}).compile();
service = module.get<EmployeesService>(EmployeesService);
});
it('should be defined', () => {
expect(service).toBeDefined();
});
}
但我收到了EmployeesService › should be defined 错误。即使在检查Inject TypeORM repository into NestJS service for mock data testing 之后,我也无法弄清楚为什么EmployeesService 在这个简单的测试中不起作用。
更多错误信息:
EmployeesService › should be defined
expect(received).toBeDefined()
Received: undefined
35 |
36 | it('should be defined', () => {
> 37 | expect(service).toBeDefined();
| ^
employees.service.ts
@Injectable()
export class EmployeesService {
constructor(
@InjectRepository(Employee, 'db1')
private employeesRepository: Repository<Employee>,
) {}
findById(id: number): Promise<Employee> {
return this.employeesRepository.findOneOrFail(id);
}
async createEmployee(createEmployeeDto: CreateEmployeeDto) {
const newEmployee = createEmployeeDto;
try {
await this.employeesRepository.save(newEmployee);
} catch (error) {
throw new BadRequestException('Cannot create employee');
}
return newEmployee;
}
async deleteEmployee(id: number) {
try {
return await this.employeesRepository.delete(id);
} catch (error) {
throw new BadRequestException('Cannot delete employee');
}
}
async updateEmployee(id: number, body: UpdateEmployeeDto) {
const employee = this.employeesRepository.findOne(id);
if (!employee) {
throw new NotFoundException('Employee not found');
}
const updatedEmployee = await this.employeesRepository.update(id, body);
return this.employeesRepository.findOne(id);
}
}
【问题讨论】:
-
这个测试套件非常标准。你能告诉我们
EmployeesService吗? -
您还可以添加遇到的任何错误吗?
-
添加错误信息和employee.service代码。谢谢
标签: typescript testing jestjs nestjs typeorm