Предположим, у вас есть приложение с сервисной и контроллерной слоями. Контроллер использует сервисы для выполнения операций. В этом сценарии вы можете использовать метод .spyOn() для мониторинга взаимодействий между этими слоями во время тестирования.

Пример:

У вас есть сервис UserService с функцией deleteUser, которая вызывается контроллером UserController в функции removeUser. Вы хотите убедиться, что функция removeUser действительно вызывает deleteUser.

// userService.js
export const UserService = {
  deleteUser: (userId) => {
    // Логика удаления пользователя
    console.log(`User ${userId} deleted`);
  }
};
 
// userController.js
import { UserService } from './userService';
 
export const UserController = {
  removeUser: (userId) => {
    UserService.deleteUser(userId);
  }
};

Тест с использованием .spyOn():

// userController.test.js
import { UserController } from './userController';
import { UserService } from './userService';
 
test('UserController calls UserService.deleteUser', () => {
  // Создаем spy на метод deleteUser
  const deleteUserSpy = jest.spyOn(UserService, 'deleteUser');
 
  // Вызываем метод контроллера
  UserController.removeUser(1);
 
  // Проверяем, что метод deleteUser был вызван
  expect(deleteUserSpy).toHaveBeenCalledWith(1);
 
  // Опционально: проверяем, что метод был вызван один раз
  expect(deleteUserSpy).toHaveBeenCalledTimes(1);
 
  // Восстанавливаем оригинальную реализацию метода
  deleteUserSpy.mockRestore();
});

Пояснение:

  1. Создание spy: Используем jest.spyOn(UserService, 'deleteUser') для создания spy на методе deleteUser.

  2. Вызов метода контроллера: Вызываем UserController.removeUser(1), что должно привести к вызову UserService.deleteUser(1).

  3. Проверка вызова: Используем expect(deleteUserSpy).toHaveBeenCalledWith(1) для проверки, что deleteUser был вызван с правильным аргументом.

  4. Проверка количества вызовов: Опционально проверяем, что метод был вызван один раз с помощью expect(deleteUserSpy).toHaveBeenCalledTimes(1).

  5. Восстановление оригинальной реализации: Используем deleteUserSpy.mockRestore() для восстановления оригинальной реализации метода после теста.

Этот подход позволяет изолировать поведение отдельных компонентов, гарантируя, что они взаимодействуют как ожидается, без необходимости знать внутреннюю работу каждого компонента.


Назад