Nest.js正在使用jest编写测试代码。依赖注入不起作用。即使应用模块中包含的所有提供程序,它也不起作用。
const mockAuthService = {
hashPassword: jest.fn(),
};
const mockUserFactory = {
createUser: jest.fn(),
};
const MockUserRepository = {
create: jest.fn(),
save: jest.fn(),
find: jest.fn(),
findOne: jest.fn(),
};
describe('UserService', () => {
let userService: UserService;
let mockUserRepository: Repository<User>;
let authService: AuthService;
let userFactory: UserFactory;
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
providers: [
UserService,
{ provide: getRepositoryToken(User), useValue: MockUserRepository },
{ provide: UserFactory, useValue: mockUserFactory },
{ provide: AuthService, useValue: mockAuthService },
],
}).compile();
userService = module.get<UserService>(UserService);
mockUserRepository = module.get<Repository<User>>(getRepositoryToken(User));
authService = module.get<AuthService>(AuthService);
userFactory = module.get<UserFactory>(UserFactory);
});
it('Success', async () => {
// given
const user = new SignUpRequestDto();
user.email = '[email protected]';
user.password = 'testpassword';
mockUserFactory.createUser.mockReturnValue(new User(user.email, user.password));
MockUserRepository.findOne.mockRejectedValue([]);
mockAuthService.hashPassword.mockResolvedValue('hashPassword');
MockUserRepository.save.mockReturnValue(new User(user.email, user.password));
// When
const result = await userService.create(user);
// Then
expect(result).toHaveProperty('email', user.email);
});
字符串
您无法创建所有提供程序。问题是什么?我们如何解决此问题?
用户服务的配置如下。
export class UserService {
constructor(
@InjectRepository(User) private userRepository: Repository<User>,
private userFactory: UserFactory,
private authService: AuthService,
) {}
型
1条答案
按热度按时间aurhwmvo1#
这是一个循环依赖问题。通过forwardRef解决。