У меня в приложении Nest Js есть простой контроллер.
@Post('/')
async create(@Body() createUserRequest: CreateUserRequest): Promise<User> {
return await this.userService.create(createUserRequest);
}
Моя цель - протестировать эту функцию с помощью jest. Как видите, контроллер вводит экземпляр UserService
. Поэтому я пытаюсь имитировать этот сервис в своем модульном тесте. Тестовый пример выглядит так.
describe('User Controller', () => {
let userService: UserService;
let userController: UserController;
beforeEach(async () => {
const module = await Test.createTestingModule({
controllers: [UserController],
providers: [UserService],
}).compile();
userService = module.get<UserService>(UserService);
userController = module.get<UserController>(UserController);
});
describe('create', () => {
it('should return a user', async () => {
const result = new User();
jest.spyOn(userService, 'create').mockImplementation(() => result);
expect(await userController.create(new CreateUserRequest())).toBe(result);
});
});
});
Моя проблема в том, что jest.spyOn
, где происходит насмешка, вызывает ошибку.
No overload matches this call.
Overload 1 of 4, '(object: UserService, method: never): SpyInstance<never, never>', gave the following error.
Argument of type '"create"' is not assignable to parameter of type 'never'.
Overload 2 of 4, '(object: UserService, method: never): SpyInstance<never, never>', gave the following error.
Argument of type '"create"' is not assignable to parameter of type 'never'.
Кто-нибудь знает, что не так с моим макетом ? Я взял этот подход из документации .