'NestJS and Jest: Nest can't resolve dependencies of the UserService
I am using a NestJS + MikroORM stack and trying to write tests using Jest.
On the user.service.spec.ts I am always getting the following error:
Nest can't resolve dependencies of the UserService (?). Please make sure that the argument UserRepository at index [0] is available in the RootTestModule context
The user.service.spec.ts:
describe('UserService', () => {
let userService: UserService;
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
providers: [
UserService,
{
provide: getRepositoryToken(User),
useValue: {
find: jest.fn().mockResolvedValue([]),
findOneOrFail: jest.fn().mockResolvedValue({}),
create: jest.fn().mockReturnValue({}),
save: jest.fn(),
update: jest.fn().mockResolvedValue(true),
delete: jest.fn().mockResolvedValue(true),
},
},
],
}).compile();
userService = module.get<UserService>(UserService);
});
it('should be defined with dependencies', () => {
expect(userService).toBeDefined();
});
});
The user.repository.ts:
@Repository(User)
export class UserRepository extends EntityRepository<User> {}
Why would that be happening? According to all other tutorials, it should work. Thanks.
Solution 1:[1]
Nest 8 changed the way DI works, it was using string tokens before, but now it uses class references instead. The nest MikroORM adapter does register both string token and class reference for custom repositories. Here you are registering the repository yourself, so you either need to register it both ways or at least the way you use.
Importing via the type requires the class reference way. Importing via @InjectRepository() requires the string token. forFeature() call registers them both in case the entity has a custom repository class.
So either add the provide: UserRepository as suggested in the other answer, or use @InjectRepository() decorator.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Martin Adámek |
