Перейти к содержимому

Автоматическое тестирование WordPress

Автоматические тесты — это код, который проверяет код. Для WordPress-проектов они решают три задачи:

  1. Предотвращение регрессий — изменения в плагине или теме не ломают существующую функциональность.
  2. Документирование поведения — тесты показывают, как система должна работать.
  3. Уверенность при рефакторинге — можно безопасно переписывать код, зная что тесты поймают ошибку.
╱ E2E ╲
╱─────────╲
╱ Интеграц. ╲
╱─────────────╲
╱ Unit-тесты ╲
╱─────────────────╲
  • Unit-тесты — быстро, дёшево, много. Тестируют изолированные функции и классы.
  • Интеграционные тесты — средняя скорость. Проверяют взаимодействие нескольких компонентов.
  • E2E-тесты — медленно, дорого, мало. Симулируют реального пользователя в браузере.

Современный подход смещает акценты:

╱ E2E ╲
╱────────────╲
╱ Интеграционные ╲ ← основной фокус
╱──────────────────╲
╱ Unit-тесты ╲
╱──────────────────────╲
╱ Статический анализ ╲
╱──────────────────────────╲
  • Статический анализ (TypeScript, ESLint, PHPStan) — основа, ловит ошибки типов
  • Интеграционные тесты — главный слой: проверяют взаимодействие компонентов, дают лучший ROI
  • Unit-тесты — только для сложной изолированной логики
  • E2E-тесты — критические пользовательские пути

Подробнее: Стратегия тестирования WordPress

Для WordPress-проектов практический баланс: мало unit-тестов + много интеграционных + несколько E2E.

Проверяют отдельные PHP-функции и методы классов в изоляции.

Инструменты: PHPUnit, WP_UnitTestCase, wp-phpunit/wp-phpunit, yoast/phpunit-polyfills.

class Test_Book_CPT extends WP_UnitTestCase {
public function setUp(): void {
parent::setUp();
mtp_register_cpt_book();
}
public function test_book_post_type_is_registered() {
$this->assertTrue( post_type_exists( 'book' ) );
}
public function test_can_create_book_post() {
$post_id = self::factory()->post->create( [
'post_type' => 'book',
'post_title' => 'Test Book',
] );
$this->assertSame( 'book', get_post_type( $post_id ) );
}
}

→ Подробнее: Unit-тесты с PHPUnit

Проверяют взаимодействие компонентов с реальной базой данных WordPress.

Инструменты: Pest PHP + WP-CLI + wp-env, фикстуры, транзакции для изоляции.

it('syncs products with attributes', function (): void {
\WooMS\Settings::setValue('wooms_attributes_sync_enabled', 1);
$productId = \WooMS\Products\product_update($row, []);
expect($productId)->toBeInt()->toBeGreaterThan(0);
$product = wc_get_product($productId);
expect($product->get_meta('wooms_id'))->toBe((string) $row['id']);
});

→ Подробнее: Интеграционные тесты: Pest + WP-CLI

Симулируют действия пользователя в браузере: клики, ввод текста, проверку видимости элементов.

Инструменты: Playwright, @wordpress/e2e-test-utils-playwright, wp-env.

→ Подробнее: E2E-тесты с Playwright

Вид тестаПрименяй дляНе применяй для
UnitЛогика PHP-функций, хуки, фильтры, валидацияUI-взаимодействия, проверка вёрстки
ИнтеграционныеCRUD-операции, API-запросы, работа с БДИзолированная бизнес-логика
E2EКритические пользовательские сценарии, блоки, паттерныТестирование всех edge-кейсов