Тестирование в Angular с Jest: настройка и запуск тестов
Зачем нужны тесты в Angular
Тестирование - это важная часть разработки приложений. Оно позволяет убедиться, что код работает правильно и не содержит ошибок.
Проверяя разные части приложения - компоненты, сервисы, маршруты - с помощью тестов, мы можем:
- Найти и исправить баги на ранних этапах
- Убедиться, что новый код не сломал старый функционал
- Рефакторить код без страха что-то сломать
- Быстро проверить работает ли приложение после изменений
Короче, тесты делают разработку надежнее и позволяют экономить время!
Знакомимся с Jest
Для тестирования в Angular часто используют библиотеку Jest. Она умеет:
- Запускать тесты очень быстро
- Имитировать работу браузера и DOM
- Генерировать тестовые данные
- Показывать подробные результаты
Короче, с Jest тесты писать и запускать одно удовольствие!
Установка Jest
Чтобы начать писать тесты, нужно установить Jest.
Это легко сделать через команду:
npm install --save-dev jest jest-preset-angular @types/jest
Также нужно добавить настройки Jest в файл jest.config.js
:
module.exports = { preset: 'jest-preset-angular', setupFilesAfterEnv: ['<rootDir>/setup-jest.ts'] };
Вот и всё! Jest готов к работе.
Пишем первый тест
Давай напишем простой тест для компонента.
Создадим файл app.component.spec.ts
рядом с компонентом:
import { AppComponent } from './app.component'; describe('AppComponent', () => { it('should create', () => { expect(AppComponent).toBeTruthy(); }); });
Здесь мы проверяем, что компонент создаётся без ошибок.
Теперь запускаем тест через npm test
. Jest выполнит тест и покажет результат - в нашем случае успешный.
Тестируем сервисы
Дальше давай напишем тест для сервиса.
Например, проверим метод getUsers()
в сервисе UserService
:
// Подставляем моки jest.mock('./user.model'); describe('UserService', () => { it('should return expected users', () => { const service = new UserService(); // Проверяем возвращаемое значение expect(service.getUsers()).toEqual([{ id: 1, name: 'John' }]); }); });
Таким образом можно протестировать любой сервис и его методы!
Тестируем формы
При тестировании форм важно проверить их взаимодействие с DOM.
Например, для компонента с формой можно написать:
let fixture; let inputEl; beforeEach(() => { // Создаём фикстуру fixture = TestBed.createComponent(SignupFormComponent); // Получаем ссылку на поле ввода inputEl = fixture.debugElement.query(By.css('input')); }); it('should update model on input', () => { // Вводим текст inputEl.triggerEventHandler('input', {target: {value: 'test'}}); // Проверяем модель expect(fixture.componentInstance.model.name).toEqual('test'); });
Таким образом можно тестировать любые формы!
Тестируем маршрутизацию
Маршрутизацию тоже важно протестировать.
Для этого используем специальные методы маршрутизатора:
let router: Router; beforeEach(() => { router = TestBed.get(Router); // получаем роутер // Настраиваем маршруты TestBed.configureTestingModule({ imports: [ RouterTestingModule.withRoutes([ { path: 'users', component: UsersComponent } ]) ] }); }); it('should navigate to users page', () => { // Переходим по маршруту router.navigate(['users']); // Проверяем URL expect(router.url).toEqual('/users'); });
Запускаем тесты автоматически
Чтобы тесты запускались автоматически при изменениях в коде, можно использовать watch mode:
npm run test — --watch
Теперь после каждого сохранения Jest перезапустит тесты. Удобно при разработке!
Также можно настроить запуск тестов на CI серверах при каждом коммите.
Итог
В общем, тестирование - это крутая штука, которая делает разработку надёжнее и быстрее. С помощью Jest тесты для Angular писать и запускать достаточно удобно.