INTEGRITY Документация

Исключение Turnstile из E2E-тестов

В этом руководстве показано, как работать с Turnstile в сквозных (E2E) тестах с помощью специальных тестовых ключей Turnstile.

Обзор

В E2E-тестах проверку Turnstile обычно нужно обойти или упростить. Для этого у Cloudflare есть официальные тестовые ключи, которые всегда проходят проверку и потому хорошо подходят для тестовых окружений:

Подробнее см. в документация по тестированию.

Внедрение

Главное при определении тестовой среды: распознать тестовые запросы на стороне сервера. Вот простой способ:

// Detect test environments using IP addresses or headers
function isTestEnvironment(request) {
  const testIPs = ['127.0.0.1', '::1'];
  const isTestIP = testIPs.includes(request.ip);
  const hasTestHeader = request.headers['x-test-environment'] === 'secret-token';

  return isTestIP || hasTestHeader;
}

// Use the appropriate credentials based on the environment
function getTurnstileCredentials(request) {
  if (isTestEnvironment(request)) {
    return {
      sitekey: '1x00000000000000000000AA',
      secretKey: '1x0000000000000000000000000000000AA'
    };
  }

  return {
    sitekey: process.env.TURNSTILE_SITE_KEY,
    secretKey: process.env.TURNSTILE_SECRET_KEY
  };
}

Интеграция на стороне сервера

При рендеринге страницы подставляйте sitekey, соответствующий окружению:

app.get('/your-form', (req, res) => {
  const { sitekey } = getTurnstileCredentials(req);
  res.render('form', { sitekey });
});

Интеграция на стороне клиента

После этого шаблон может использовать переданный sitekey:

<div class="turnstile" data-sitekey="<%= sitekey %>"></div>

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

  1. Определение окружения

    • Определяйте тестовые среды по нескольким признакам (IP, заголовки и так далее).
    • Если тестирование ведётся из публичной сети, не раскрывайте идентификаторы тестовой среды.
  2. Управление учётными данными

    • Храните рабочие учётные данные безопасно (например, в переменных окружения).
    • Никогда не сохраняйте учётные данные в системе контроля версий.
    • Используйте разные учётные данные для каждой среды.
  3. Безопасность развёртывания

    • Добавьте проверки, чтобы тестовые ключи не попали в рабочую среду.
    • Добавьте проверку учётных данных в конвейер CI/CD.
    • Следите за тем, чтобы тестовые ключи не использовались по ошибке.

Что учесть при тестировании

Пример настройки тестов

Для Cypress и других подобных фреймворков E2E-тестирования:

// Set test header for all test requests
beforeEach(() => {
  cy.intercept('*', (req) => {
    req.headers['x-test-environment'] = 'secret-token';
  });
});

// Your test can now interact with the form normally
it('submits form successfully', () => {
  cy.visit('/your-form');
  cy.get('form').submit();
  // Turnstile will automatically pass verification
});

Заключение

Тестовые ключи Turnstile вместе с корректным определением окружения позволяют строить надёжные E2E-тесты и не жертвовать безопасностью на боевом сайте. Тестовые ключи всегда держите отдельно от боевых и предусмотрите защитные проверки в процессе развёртывания.