TypeScript
Введение
Playwright поддерживает TypeScript из коробки. Вы просто пишете тесты на TypeScript, и Playwright будет их читать, преобразовывать в JavaScript и запускать.
Обратите внимание, что Playwright не проверяет типы и будет запускать тесты, даже если есть некритические ошибки компиляции TypeScript. Мы рекомендуем запускать компилятор TypeScript вместе с Playwright. Например, в GitHub actions:
jobs:
test:
runs-on: ubuntu-latest
steps:
...
- name: Run type checks
run: npx tsc -p tsconfig.json --noEmit
- name: Run Playwright tests
run: npx playwright test
Для локальной разработки вы можете запустить tsc
в режиме наблюдения следующим образом:
npx tsc -p tsconfig.json --noEmit -w
tsconfig.json
Playwright будет использовать tsconfig.json
для каждого загружаемого исходного файла. Обратите внимание, что Playwright поддерживает только следующие опции tsconfig: allowJs
, baseUrl
, paths
и references
.
Мы рекомендуем настроить отдельный tsconfig.json
в директории тестов, чтобы вы могли изменить некоторые предпочтения специально для тестов. Вот пример структуры директорий.
src/
source.ts
tests/
tsconfig.json # tsconfig, специфичный для тестов
example.spec.ts
tsconfig.json # общий tsconfig для всех исходников TypeScript
playwright.config.ts
Маппинг путей в tsconfig
Playwright поддерживает маппинг путей, объявленный в tsconfig.json
. Убедитесь, что baseUrl
также установлен.
Вот пример tsconfig.json
, который работает с Playwright:
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@myhelper/*": ["packages/myhelper/*"] // Это отображение относительно "baseUrl".
}
}
}
Теперь вы можете импортировать, используя отображенные пути:
import { test, expect } from '@playwright/test';
import { username, password } from '@myhelper/credentials';
test('example', async ({ page }) => {
await page.getByLabel('User Name').fill(username);
await page.getByLabel('Password').fill(password);
});
Разрешение tsconfig
По умолчанию Playwright будет искать ближайший tsconfig для каждого импортированного файла, поднимаясь по структуре директорий и ища tsconfig.json
или jsconfig.json
. Таким образом, вы можете создать файл tests/tsconfig.json
, который будет использоваться только для ваших тестов, и Playwright автоматически его подхватит.
# Playwright автоматически выберет tsconfig
npx playwright test
В качестве альтернативы, вы можете указать один файл tsconfig для использования в командной строке, и Playwright будет использовать его для всех импортированных файлов, а не только для тестовых файлов.
# Указать конкретный tsconfig
npx playwright test --tsconfig=tsconfig.test.json
Вы можете указать один файл tsconfig в конфигурационном файле, который будет использоваться для загрузки тестовых файлов, репортеров и т.д. Однако он не будет использоваться при загрузке самого конфигурационного файла playwright или любых файлов, импортированных из него.
import { defineConfig } from '@playwright/test';
export default defineConfig({
tsconfig: './tsconfig.test.json',
});
Ручная компиляция тестов с помощью TypeScript
Иногда Playwright Test не сможет правильно преобразовать ваш код TypeScript, например, когда вы используете экспериментальные или очень новые функции TypeScript, обычно настроенные в tsconfig.json
.
В этом случае вы можете выполнить собственную компиляцию TypeScript перед отправкой тестов в Playwright.
Сначала добавьте файл tsconfig.json
в директорию тестов:
{
"compilerOptions": {
"target": "ESNext",
"module": "commonjs",
"moduleResolution": "Node",
"sourceMap": true,
"outDir": "../tests-out",
}
}
В package.json
добавьте два скрипта:
{
"scripts": {
"pretest": "tsc --incremental -p tests/tsconfig.json",
"test": "playwright test -c tests-out"
}
}
Скрипт pretest
запускает TypeScript на тестах. test
будет запускать тесты, которые были сгенерированы в директорию tests-out
. Аргумент -c
настраивает тестовый раннер на поиск тестов внутри директории tests-out
.
Затем npm run test
соберет тесты и запустит их.