【发布时间】:2021-12-08 13:34:44
【问题描述】:
尝试使用 NestJS 进行单元测试时出现以下错误。
Nest 无法解析 UsersService 的依赖项(UsersRepository、?、UserRoleRepository、RoleRepository、JWTService)。请确保索引 [1] 处的参数 CredentialsRepository 在 RootTestModule 上下文中可用。
测试代码
describe("UsersService", () => {
let service: UsersService;
let repositoryMock: MockType<Repository<Users>>;
let model: typeof Users;
let repo: Repository<Users>;
let userController: UsersController;
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
imports: [
TypeOrmModule.forRoot({
type: "mysql",
host: config.db.host,
port: config.db.port,
username: config.db.username,
password: config.db.password,
database: config.db.database,
autoLoadEntities: true,
synchronize: true,
}),
CredentialsModule,
],
providers: [
UsersService,
CredentialsService,
AuthService,
JWTService,
{
provide: getRepositoryToken(Users),
// useValue: {
// find: jest.fn(() => [Alluser]),
// },
useFactory: repositoryMockFactory,
},
],
}).compile();
service = module.get<UsersService>(UsersService);
repositoryMock = module.get(getRepositoryToken(Users));
});
it("User details get by Id", async () => {
repositoryMock.findOne.mockReturnValue(testUser);
expect(service.findUser(testUser.id)).toEqual(testUser);
expect(repositoryMock.findOne).toHaveBeenCalledWith(testUser.id);
// expect(await service.findOne(1)).toBeCalledWith(testUser);
});
// it("All Users details ", async () => {
// expect(await service.find()).toEqual([Alluser]);
// });
// it('Create new User ', async () => {
// expect(await service.createNewUser(createUser)).toEqual(testUser);
// });
});
【问题讨论】:
-
因为您正在对
UsersService进行单元测试,所以只有UsersService服务应该在您的providers数组中。然后您将拥有{ provide: X, use... }的每个依赖项(或使用auto mocking 功能)。使用这种方法,您将不会收到此错误。 github.com/jmcdo29/testing-nestjs
标签: nestjs