Несколько конфигураций
Начиная с Vitest 3, вы можете указывать несколько различных конфигураций браузера, используя новую опцию browser.instances
.
Основное преимущество использования browser.instances
по сравнению с тестовыми проектами заключается в более эффективном кэшировании. Каждый экземпляр будет использовать один и тот же сервер Vite, что означает, что преобразование файлов и предварительная сборка зависимостей должны происходить только один раз.
Несколько браузеров
Вы можете использовать поле browser.instances
для задания параметров различных браузеров. Например, если вы хотите запустить одни и те же тесты в разных браузерах, минимальная конфигурация будет следующей:
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
browser: {
enabled: true,
provider: 'playwright',
headless: true,
instances: [
{ browser: 'chromium' },
{ browser: 'firefox' },
{ browser: 'webkit' },
],
},
},
});
Различные настройки
Вы также можете указывать различные параметры конфигурации независимо от выбранного браузера (хотя экземпляры могут также иметь поля browser
):
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
browser: {
enabled: true,
provider: 'playwright',
headless: true,
instances: [
{
browser: 'chromium',
name: 'chromium-1',
setupFiles: ['./ratio-setup.ts'],
provide: {
ratio: 1,
},
},
{
browser: 'chromium',
name: 'chromium-2',
provide: {
ratio: 2,
},
},
],
},
},
});
import { expect, inject, test } from 'vitest';
import { globalSetupModifier } from './example.js';
test('ratio works', () => {
expect(inject('ratio') * globalSetupModifier).toBe(14);
});
В этом примере Vitest запустит все тесты в браузере chromium
, но выполнит файл './ratio-setup.ts'
только для первой конфигурации и внедрит другое значение ratio
в зависимости от поля provide
.
WARNING
Обратите внимание, что вам нужно определить пользовательское значение name
, если вы используете одно и то же имя браузера, потому что в противном случае Vitest назначит browser
в качестве имени проекта.
Фильтрация
Вы можете отфильтровать проекты для запуска с помощью флага --project
. Vitest автоматически присвоит имя браузера имени проекта, если оно не назначено вручную. Если основная конфигурация уже имеет имя, Vitest объединит их: custom
-> custom (browser)
.
$ vitest --project=chromium
export default defineConfig({
test: {
browser: {
instances: [
// имя: chromium
{ browser: 'chromium' },
// имя: custom
{ browser: 'firefox', name: 'custom' },
]
}
}
})
export default defineConfig({
test: {
name: 'custom',
browser: {
instances: [
// имя: custom (chromium)
{ browser: 'chromium' },
// имя: manual
{ browser: 'firefox', name: 'manual' },
]
}
}
})
WARNING
Vitest не может запускать несколько экземпляров, где режим headless
установлен на false
(по умолчанию headless
включен). Во время разработки вы можете выбрать, какой проект запускать в терминале:
? Found multiple projects that run browser tests in headed mode: "chromium", "firefox".
Vitest cannot run multiple headed browsers at the same time. Select a single project
to run or cancel and run tests with "headless: true" option. Note that you can also
start tests with --browser=name or --project=name flag. › - Use arrow-keys. Return to submit.
❯ chromium
firefox
Если у вас есть несколько проектов, не использующих режим headless, в CI (т.е. headless: false
установлено вручную в конфигурации и не переопределено в среде CI), Vitest завершится с ошибкой и не запустит никаких тестов.
Возможность запуска тестов в режиме headless не затрагивается этим ограничением. Вы по-прежнему можете запускать все инстансы параллельно, при условии, что для них не задано headless: false
.