Конвенции именования файлов и методов

Правильная организация кода и единообразные соглашения об именах критически важны для поддерживаемости и масштабируемости тестов в Protractor. Несоблюдение конвенций приводит к трудностям при чтении кода, поиске тестов и их интеграции в CI/CD пайплайны.

Именование файлов тестов

Файлы с тестами должны отражать структуру приложения и суть проверяемого сценария. Чаще всего используется соглашение snake_case или kebab-case для удобства навигации в файловой системе.

Примеры:

  • login_spec.js — тесты для логина.
  • user_profile_spec.js — тесты для профиля пользователя.
  • shopping_cart_e2e.js — end-to-end тесты корзины покупок.

Ключевые принципы:

  • Суффикс _spec или _e2e указывает, что файл содержит тесты.
  • Использовать одну доминирующую конвенцию по всему проекту.
  • Не следует использовать пробелы, специальные символы или регистрозависимые отличия.

Именование методов тестов

Методы тестов должны быть самодокументируемыми, чтобы их назначение было понятно без комментариев. В Protractor и Jasmine принято использовать camelCase для функций, отвечающих за действия или проверки.

Примеры методов:

function loginUser(username, password) { ... }
function addItemToCart(itemId) { ... }
function verifyUserProfileDetails(expectedName, expectedEmail) { ... }

Рекомендации по именованию:

  • Глагол в начале метода показывает действие (clickButton, fillForm, navigateToPage).
  • Если метод выполняет проверку — использовать verify или expect (verifyLoginSuccess).
  • Не использовать аббревиатуры, если они не общеприняты и неочевидны.
  • Конкретизировать контекст, если метод работает с элементами интерфейса (clickLoginButton, fillSearchInput).

Структура папок и файлов

Для крупных проектов критично сохранять логическую структуру каталогов:

/e2e
  /login
    login_spec.js
    loginPage.po.js
  /cart
    cart_spec.js
    cartPage.po.js

Где:

  • *_spec.js — файлы с тестами.
  • *Page.po.js — файлы с Page Object, реализующие взаимодействие с элементами.

Преимущества:

  • Быстрое понимание, где находятся тесты и их вспомогательные объекты.
  • Удобство рефакторинга при изменении интерфейса приложения.

Именование Page Objects и компонентов

Page Objects должны называться существительным, обозначающим страницу или компонент. Методы внутри PO описывают действия на этой странице.

Примеры:

class LoginPage {
    async enterUsername(username) { ... }
    async enterPassword(password) { ... }
    async clickLoginButton() { ... }
}

Рекомендации:

  • Имена классов Page Object с PascalCase (LoginPage, ShoppingCartPage).
  • Методы в Page Object — camelCase (fillSearchBox, submitForm).
  • При работе с компонентами использовать префикс для контекста (cartAddItemButton, profileEditLink).

Конвенции для селекторов и переменных

В Protractor часто используются переменные для элементов страницы. Их именование должно быть понятным и отражать роль элемента.

Примеры:

const loginButton = element(by.id('login-btn'));
const usernameInput = element(by.css('.username-field'));
const errorMessage = element(by.xpath('//div[@class="error"]'));

Принципы:

  • Название переменной отражает назначение элемента, а не его тип (loginButton, а не button1).
  • Единый стиль по всему проекту (camelCase) облегчает чтение.
  • Для коллекций элементов использовать множественное число (menuItems, cartProducts).

Использование префиксов и постфиксов

Префикс или постфикс могут дать дополнительный контекст:

  • _btn, _link, _input — указывают на тип элемента.
  • _spec, _e2e — тестовый файл.
  • _po — Page Object.

Примеры:

const submit_btn = element(by.id('submit'));
const cart_items = element.all(by.css('.cart-item'));
const login_po = new LoginPage();

Это упрощает поиск и понимание кода при масштабировании тестов.

Важность единообразия

Независимо от выбранной конвенции, критично поддерживать единый стиль по проекту:

  • Минимизирует ошибки при работе нескольких разработчиков.
  • Улучшает интеграцию с CI/CD, где используются автоматические сборщики и линтеры.
  • Упрощает рефакторинг и повторное использование тестов и Page Objects.

Единообразное именование файлов, методов, Page Objects и переменных является фундаментом качественного тестового покрытия в Protractor.