Аргумент Jest Mock Service не может быть назначен - PullRequest
0 голосов
/ 11 июля 2020

У меня в приложении 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'.

Кто-нибудь знает, что не так с моим макетом ? Я взял этот подход из документации .

1 Ответ

0 голосов
/ 12 июля 2020

Вероятно, это не тот ответ, который вы ожидали, однако вы можете добиться того же результата, реализовав, как показано ниже:

// ...
describe('create', () => {
  it('should return a user', async () => {
    const result = new User();

    ((userService as unknown) as any).create = jest.fn().mockResolvedValue(result);
    // Or to ensure that the value is only called once, 
    // go ahead and use 'mockResolvedValueOnce'

    expect(await userController.create(new CreateUserRequest())).toBe(result);
  });
});
// ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...